gnubik-2.4.3/0000755000175000017460000000000013070437266010015 500000000000000gnubik-2.4.3/NEWS0000644000175000017460000000541313070437257010437 00000000000000GNUbik 2.4.3 - A minor release primarily to update translations and some minor bug fixes * An Arabic translation has been added * We now depend on Gtk+ version 2.24 GNUbik 2.4.2 - A minor release primarily to update translations * Various new and updated translations. * The .desktop file is now internationalised. * A compiler warning on newer gcc versions has been eliminated. GNUbik 2.4.1 - A minor release with very few changes * Rebuilt against newer version of automake (1.11.6) to address security advisories http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-4029 http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-3386 * Updated several translations where contributions have been provided. * Several minor compatibility fixes. GNUbik 2.4 * Animation is now significantly faster, making the program a lot less frustrating when run on machines with low-end graphics. * You can now show several concurrent views of the cube from different angles. * `Cubes' are no longer restricted to a cubic shape. General right-angled parallelepipeds are now possible. * Corrected minor errors in the documentation. * Fixed some portability issues. * Fixed a bug where the program would crash on startup with larger size cubes. * Added eo, uk and sl translations. * We now depend on Gtk+ version 2.20 or later. * Made sure it'll work with Guile 2.0 although Guile 1.8 is sufficient. GNUbik 2.3 * Reorganised the autotools and build system. * Updated the licence from GPLv2+ to GPLV3+ * Added bg, gr, pt_BR, pt_PT and zh_CH translations. * We now depend on Gtk+ version 2.6 or later. * We now depend on Guile version 1.8 or later. GNUbik 2.2 * Added video-style buttons for playing/replaying moves. * Various bugs fixed. * Minor cosmetic improvements to the user interface. * Added a Basque and a Catalan localisation. * As of this release, GTK+ is the definitive widget set. The Athena compile time option will no longer be maintained. GNUbik 2.1 * Added support for Guile scripts (Script-fu), plus scripts to randomize and solve the cube. * Added Polish and Russian localisations. * Minor bug fixes. GNUbik 2.0 * Renamed the project to GNUbik as it's now part of the GNU project * Added a French localisation Grubik 1.16 This version of adds a handfull of improvement: * Internationalisation. Only a German and American localisation is done at present. * Antialiasing of the cube. It looks much better! * You can put your own images onto the cube surface. * The mouse cursor now points in the direction the blocks will turn. * Optional lighting. There's also numerous bug fixes and general improvements to the code. gnubik-2.4.3/config.h.in0000644000175000017460000000654113070437142011757 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Set to 1 if debugging features should be compiled in */ #undef DEBUG /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the `getopt_long' function. */ #undef HAVE_GETOPT_LONG /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* 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 /* Name of package */ #undef PACKAGE /* 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 /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif gnubik-2.4.3/aclocal.m40000644000175000017460000047015713070437135011606 00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # gettext.m4 serial 68 (gettext-0.19.8) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) # serial 10 # GUILE_PKG -- find Guile development files # # Usage: GUILE_PKG([VERSIONS]) # # This macro runs the @code{pkg-config} tool to find development files # for an available version of Guile. # # By default, this macro will search for the latest stable version of # Guile (e.g. 2.0), falling back to the previous stable version # (e.g. 1.8) if it is available. If no guile-@var{VERSION}.pc file is # found, an error is signalled. The found version is stored in # @var{GUILE_EFFECTIVE_VERSION}. # # If @code{GUILE_PROGS} was already invoked, this macro ensures that the # development files have the same effective version as the Guile # program. # # @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by # @code{AC_SUBST}. # AC_DEFUN([GUILE_PKG], [PKG_PROG_PKG_CONFIG _guile_versions_to_search="m4_default([$1], [2.0 1.8])" if test -n "$GUILE_EFFECTIVE_VERSION"; then _guile_tmp="" for v in $_guile_versions_to_search; do if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then _guile_tmp=$v fi done if test -z "$_guile_tmp"; then AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) fi _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION fi GUILE_EFFECTIVE_VERSION="" _guile_errors="" for v in $_guile_versions_to_search; do if test -z "$GUILE_EFFECTIVE_VERSION"; then AC_MSG_NOTICE([checking for guile $v]) PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) fi done if test -z "$GUILE_EFFECTIVE_VERSION"; then AC_MSG_ERROR([ No Guile development packages were found. Please verify that you have Guile installed. If you installed Guile from a binary distribution, please verify that you have also installed the development packages. If you installed it yourself, you might need to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. ]) fi AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) AC_SUBST([GUILE_EFFECTIVE_VERSION]) ]) # GUILE_FLAGS -- set flags for compiling and linking with Guile # # Usage: GUILE_FLAGS # # This macro runs the @code{pkg-config} tool to find out how to compile # and link programs against Guile. It sets four variables: # @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and # @var{GUILE_LTLIBS}. # # @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that # uses Guile header files. This is almost always just one or more @code{-I} # flags. # # @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program # against Guile. This includes @code{-lguile-@var{VERSION}} for the # Guile library itself, and may also include one or more @code{-L} flag # to tell the compiler where to find the libraries. But it does not # include flags that influence the program's runtime search path for # libraries, and will therefore lead to a program that fails to start, # unless all necessary libraries are installed in a standard location # such as @file{/usr/lib}. # # @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to # libtool, respectively, to link a program against Guile. It includes flags # that augment the program's runtime search path for libraries, so that shared # libraries will be found at the location where they were during linking, even # in non-standard locations. @var{GUILE_LIBS} is to be used when linking the # program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used # when linking the program is done through libtool. # # The variables are marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_FLAGS], [AC_REQUIRE([GUILE_PKG]) PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS dnl to us. GUILE_LDFLAGS=$GUILE_LIBS dnl Determine the platform dependent parameters needed to use rpath. dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs dnl the file gnulib/build-aux/config.rpath. AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" AC_SUBST([GUILE_EFFECTIVE_VERSION]) AC_SUBST([GUILE_CFLAGS]) AC_SUBST([GUILE_LDFLAGS]) AC_SUBST([GUILE_LIBS]) AC_SUBST([GUILE_LTLIBS]) ]) # GUILE_SITE_DIR -- find path to Guile "site" directory # # Usage: GUILE_SITE_DIR # # This looks for Guile's "site" directory, usually something like # PREFIX/share/guile/site, and sets var @var{GUILE_SITE} to the path. # Note that the var name is different from the macro name. # # The variable is marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_SITE_DIR], [AC_REQUIRE([GUILE_PKG]) AC_MSG_CHECKING(for Guile site directory) GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` AC_MSG_RESULT($GUILE_SITE) if test "$GUILE_SITE" = ""; then AC_MSG_FAILURE(sitedir not found) fi AC_SUBST(GUILE_SITE) ]) # GUILE_PROGS -- set paths to Guile interpreter, config and tool programs # # Usage: GUILE_PROGS([VERSION]) # # This macro looks for programs @code{guile} and @code{guild}, setting # variables @var{GUILE} and @var{GUILD} to their paths, respectively. # If @code{guile} is not found, signal an error. # # By default, this macro will search for the latest stable version of # Guile (e.g. 2.0). x.y or x.y.z versions can be specified. If an older # version is found, the macro will signal an error. # # The effective version of the found @code{guile} is set to # @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective # version is compatible with the result of a previous invocation of # @code{GUILE_FLAGS}, if any. # # As a legacy interface, it also looks for @code{guile-config} and # @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. # # The variables are marked for substitution, as by @code{AC_SUBST}. # AC_DEFUN([GUILE_PROGS], [AC_PATH_PROG(GUILE,guile) _guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" if test -z "$_guile_required_version"; then _guile_required_version=2.0 fi if test "$GUILE" = "" ; then AC_MSG_ERROR([guile required but not found]) fi AC_SUBST(GUILE) _guile_effective_version=`$GUILE -c "(display (effective-version))"` if test -z "$GUILE_EFFECTIVE_VERSION"; then GUILE_EFFECTIVE_VERSION=$_guile_effective_version elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) fi _guile_major_version=`$GUILE -c "(display (major-version))"` _guile_minor_version=`$GUILE -c "(display (minor-version))"` _guile_micro_version=`$GUILE -c "(display (micro-version))"` _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) _major_version=`echo $_guile_required_version | cut -d . -f 1` _minor_version=`echo $_guile_required_version | cut -d . -f 2` _micro_version=`echo $_guile_required_version | cut -d . -f 3` if test "$_guile_major_version" -ge "$_major_version"; then if test "$_guile_minor_version" -ge "$_minor_version"; then if test -n "$_micro_version"; then if test "$_guile_micro_version" -lt "$_micro_version"; then AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) fi fi elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then # Allow prereleases that have the right effective version. true else as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 fi else AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) fi AC_MSG_RESULT([$_guile_prog_version]) AC_PATH_PROG(GUILD,guild) AC_SUBST(GUILD) AC_PATH_PROG(GUILE_CONFIG,guile-config) AC_SUBST(GUILE_CONFIG) if test -n "$GUILD"; then GUILE_TOOLS=$GUILD else AC_PATH_PROG(GUILE_TOOLS,guile-tools) fi AC_SUBST(GUILE_TOOLS) ]) # GUILE_CHECK -- evaluate Guile Scheme code and capture the return value # # Usage: GUILE_CHECK_RETVAL(var,check) # # @var{var} is a shell variable name to be set to the return value. # @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and # returning either 0 or non-#f to indicate the check passed. # Non-0 number or #f indicates failure. # Avoid using the character "#" since that confuses autoconf. # AC_DEFUN([GUILE_CHECK], [AC_REQUIRE([GUILE_PROGS]) $GUILE -c "$2" > /dev/null 2>&1 $1=$? ]) # GUILE_MODULE_CHECK -- check feature of a Guile Scheme module # # Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) # # @var{var} is a shell variable name to be set to "yes" or "no". # @var{module} is a list of symbols, like: (ice-9 common-list). # @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. # @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). # AC_DEFUN([GUILE_MODULE_CHECK], [AC_MSG_CHECKING([if $2 $4]) GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi AC_MSG_RESULT($$1) ]) # GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module # # Usage: GUILE_MODULE_AVAILABLE(var,module) # # @var{var} is a shell variable name to be set to "yes" or "no". # @var{module} is a list of symbols, like: (ice-9 common-list). # AC_DEFUN([GUILE_MODULE_AVAILABLE], [GUILE_MODULE_CHECK($1,$2,0,is available) ]) # GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable # # Usage: GUILE_MODULE_REQUIRED(symlist) # # @var{symlist} is a list of symbols, WITHOUT surrounding parens, # like: ice-9 common-list. # AC_DEFUN([GUILE_MODULE_REQUIRED], [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) if test "$ac_guile_module_required" = "no" ; then AC_MSG_ERROR([required guile module not found: ($1)]) fi ]) # GUILE_MODULE_EXPORTS -- check if a module exports a variable # # Usage: GUILE_MODULE_EXPORTS(var,module,modvar) # # @var{var} is a shell variable to be set to "yes" or "no". # @var{module} is a list of symbols, like: (ice-9 common-list). # @var{modvar} is the Guile Scheme variable to check. # AC_DEFUN([GUILE_MODULE_EXPORTS], [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') ]) # GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable # # Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) # # @var{module} is a list of symbols, like: (ice-9 common-list). # @var{modvar} is the Guile Scheme variable to check. # AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) if test "$guile_module_required_export" = "no" ; then AC_MSG_ERROR([module $1 does not export $2; required]) fi ]) # iconv.m4 serial 19 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated . m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) # intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) # lib-ld.m4 serial 6 dnl Copyright (C) 1996-2003, 2009-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 /dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 = 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) # lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # po.m4 serial 24 (gettext-0.19) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR gnubik-2.4.3/TODO0000644000175000017460000000123313070435673010424 00000000000000* Some people have asked for to be able to make "custom" configurations. That is, to be able to manually arrange the colours of the faces, and have the program solve itself from that position. * Some insane individual might want a 4 dimensional version. This could be achieved by splitting the top level window into 8 sub-windows, each containing its own cube. The 8 cubes, would make up the `faces' of the 4 dimensional `hyper-cube'. Thus, any cube can be manipulated, but this would automatically affect 6 of the 7 other cubes. For inspiration, see the novel by Abbot E. A., "Flatland. A Romance of Many Dimensions", Basil Blackwell, 1978. gnubik-2.4.3/COPYING0000644000175000017460000010451313070435673010774 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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 3 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gnubik-2.4.3/src/0000755000175000017460000000000013070437266010604 500000000000000gnubik-2.4.3/src/txfm.h0000644000175000017460000000342313070435673011655 00000000000000/* A little library to do matrix arithmetic Copyright (C) 1998, 2011 John Darrington This program 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 3 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, see . */ #ifndef TXFM_H #define TXFM_H #include #include #define MATRIX_DIM 4 typedef GLfloat Matrix[MATRIX_DIM * MATRIX_DIM]; typedef GLfloat pv[MATRIX_DIM]; typedef pv point, vector; /* Multiply a vector by a scalar); */ void vector_mult (vector v, float scalar); /* pre-multiply point/vector pv by matrix tx */ void vector_transform_in_place (pv x, const Matrix tx); void vector_transform (pv q, const pv x, const Matrix M); /* Pre Multiply Matrix N, by Matrix M, the result is left in N */ void matrix_pre_mult (Matrix N, const Matrix M); /* Display Matrix M on stdout */ void matrix_dump (const Matrix M); /* Display point p's co-ordinates on stdout*/ void point_dump (const point p); /* Set an element of a matrix */ void matrix_set (Matrix M, int x, int y, float value); /* Create a vector from the difference of two points */ void vector_from_points (vector v, const point p1, const point p2); /* Return non-zero if the two vectors are equal. */ bool vectors_equal (const vector v1, const vector v2); #endif /* TXFM_H */ gnubik-2.4.3/src/menus.c0000644000175000017460000003434313070435673012026 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 2003, 2004, 2011 John Darrington This program 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 3 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, see . */ #include #include #include "cube.h" #include "menus.h" #include "dialogs.h" #include "guile-hooks.h" #include "colour-dialog.h" #include "drwBlock.h" #include "glarea.h" #include "game.h" #include #include #define _(String) gettext (String) #define N_(String) (String) static void new_view (GbkGame * game, const gchar * description, const gfloat * aspect) { gchar *title; GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); GtkWidget *view = gbk_cubeview_new (game->cube); /* Copy all the properties from the master view to the new one */ { guint n, i; GParamSpec **specs = g_object_class_list_properties (G_OBJECT_GET_CLASS (view), &n); for (i = 0; i < n; ++i) { GValue value = { 0 }; if (!(specs[i]->flags & G_PARAM_WRITABLE)) continue; if (!(specs[i]->flags & G_PARAM_READABLE)) continue; if (specs[i]->owner_type != G_OBJECT_TYPE (view)) continue; g_value_init (&value, specs[i]->value_type); g_object_get_property (G_OBJECT (game->masterview), specs[i]->name, &value); g_object_set_property (G_OBJECT (view), specs[i]->name, &value); g_value_unset (&value); } g_free (specs); } gtk_window_set_icon_name (GTK_WINDOW (window), "gnubik"); title = g_strdup_printf ("%s %s", _(PACKAGE_NAME), description); gtk_window_set_title (GTK_WINDOW (window), title); g_free (title); gtk_container_add (GTK_CONTAINER (window), view); g_object_set (view, "aspect", aspect, NULL); gbk_game_add_view (game, GBK_CUBEVIEW (view), FALSE); gtk_widget_show_all (window); } static void view_rear (GtkAction * act, GbkGame * game) { gfloat aspect[4] = { 180, 0, 1, 0 }; new_view (game, _("Rear View"), aspect); } static void view_bottom (GtkAction * act, GbkGame * game) { gfloat aspect[4] = { 90, 1, 0, 0 }; new_view (game, _("Bottom View"), aspect); } static void view_top (GtkAction * act, GbkGame * game) { gfloat aspect[4] = { -90, 1, 0, 0 }; new_view (game, _("Top View"), aspect); } static void view_left (GtkAction * act, GbkGame * game) { gfloat aspect[4] = { -90, 0, 1, 0 }; new_view (game, _("Left View"), aspect); } static void view_right (GtkAction * act, GbkGame * game) { gfloat aspect[4] = { 90, 0, 1, 0 }; new_view (game, _("Right View"), aspect); } #define MSGLEN 100 static void update_statusbar_mark (GbkGame * game, gint x, GtkStatusbar * statusbar) { gchar mesg[MSGLEN]; int context = gtk_statusbar_get_context_id (statusbar, "marks"); g_snprintf (mesg, MSGLEN, _("A mark is now set at position %d."), game->posn); gtk_statusbar_pop (statusbar, context); game->mesg_id = gtk_statusbar_push (statusbar, context, mesg); } static void update_statusbar_moves (GbkGame * game, GtkStatusbar * statusbar) { gchar mesg[MSGLEN]; int context = gtk_statusbar_get_context_id (statusbar, "move-count"); g_snprintf (mesg, MSGLEN, _("Moves: %d / %d"), game->posn, game->total); gtk_statusbar_pop (statusbar, context); game->mesg_id = gtk_statusbar_push (statusbar, context, mesg); /* Now check if the cube is solved and update statusbar accordingly */ context = gtk_statusbar_get_context_id (statusbar, "cube-state"); enum cube_status status = gbk_cube_get_status (game->cube); if (NOT_SOLVED == status) { gtk_statusbar_pop (statusbar, context); } else if (SOLVED == status) { g_snprintf (mesg, MSGLEN, ngettext ("Cube solved in %d move", "Cube solved in %d moves", game->posn), game->posn); game->mesg_id = gtk_statusbar_push (statusbar, context, mesg); } else if (HALF_SOLVED == status) { g_snprintf (mesg, MSGLEN, _ ("Cube is NOT solved! The colours are correct, but have incorrect orientation")); game->mesg_id = gtk_statusbar_push (statusbar, context, mesg); } } static void update_statusbar_animation (GbkCubeview * view, GParamSpec * sp, GtkStatusbar * statusbar) { int context; gchar mesg[MSGLEN]; int n; context = gtk_statusbar_get_context_id (statusbar, "animation"); g_object_get (view, "animation-frames", &n, NULL); g_snprintf (mesg, MSGLEN, ngettext ("Animation rate set to %d frame per turn.", "Animation rate set to %d frames per turn.", n), n); gtk_statusbar_pop (statusbar, context); gtk_statusbar_push (statusbar, context, mesg); } GtkWidget * create_statusbar (GbkGame * game) { GtkWidget *statusbar = gtk_statusbar_new (); g_signal_connect (game, "queue-changed", G_CALLBACK (update_statusbar_moves), statusbar); g_signal_connect (game, "mark-set", G_CALLBACK (update_statusbar_mark), statusbar); g_signal_connect (game->masterview, "notify::animation-frames", G_CALLBACK (update_statusbar_animation), statusbar); return statusbar; } static const GtkActionEntry action_entries[] = { {"game-menu-action", NULL, N_("_Game")}, {"view-menu-action", NULL, N_("_View")}, /* TRANSLATORS: Lets the user see the cube from a different angle */ {"add-view-menu-action", NULL, N_("Add _View"), NULL, N_("Add an auxiliary view of the cube")}, {"help-menu-action", NULL, N_("_Help")}, {"show-hide-menu-action", NULL, N_("Sho_w/Hide")}, {"scripts-menu-action", NULL, N_("_Scripts")}, { "about-action", GTK_STOCK_ABOUT, NULL, NULL, "about", G_CALLBACK (about_dialog)}, { "quit-action", GTK_STOCK_QUIT, NULL, "Q", "quit", G_CALLBACK (gtk_main_quit)} }; static void restart_game (GtkWidget * w, GbkGame * game) { gbk_cube_scramble (game->cube); gbk_game_reset (game); } void start_new_game (GbkGame * game, int size0, int size1, int size2, gboolean scramble) { gbk_cube_set_size (game->cube, size0, size1, size2); if (scramble) gbk_cube_scramble (game->cube); gbk_game_reset (game); } static void animate_faster (GtkWidget * w, GbkGame * game) { GSList *v; int frames; g_object_get (game->masterview, "animation-frames", &frames, NULL); frames *= 2 / 3.0; /* Iterate over all the views and set the new properties */ for (v = game->views; v != NULL; v = g_slist_next (v)) { g_object_set (v->data, "animation-frames", frames, NULL); } } static void animate_slower (GtkWidget * w, GbkGame * game) { int frames; GSList *v; g_object_get (game->masterview, "animation-frames", &frames, NULL); frames /= 2 / 3.0; if (frames == 0) frames = 1; if (frames == 1) frames = 2; /* Iterate over all the views and set the new properties */ for (v = game->views; v != NULL; v = g_slist_next (v)) { g_object_set (v->data, "animation-frames", frames, NULL); } } static const GtkActionEntry game_action_entries[] = { { "restart-game-action", NULL, N_("_Restart Game"), NULL, "restart-game", G_CALLBACK (restart_game)}, { "new-game-action", GTK_STOCK_NEW, N_("_New Game"), "N", "new-game", G_CALLBACK (new_game_dialog)}, {"add-view-rear-action", NULL, N_("_Rear"), NULL, NULL, G_CALLBACK (view_rear)}, {"add-view-left-action", NULL, N_("_Left"), NULL, NULL, G_CALLBACK (view_left)}, {"add-view-right-action", NULL, N_("Ri_ght"), NULL, NULL, G_CALLBACK (view_right)}, {"add-view-top-action", NULL, N_("_Top"), NULL, NULL, G_CALLBACK (view_top)}, {"add-view-bottom-action", NULL, N_("_Bottom"), NULL, NULL, G_CALLBACK (view_bottom)}, { "colours-action", GTK_STOCK_SELECT_COLOR, N_("_Colours"), NULL, "colours", G_CALLBACK (colour_select_menu)}, { "animation-action", NULL, N_("_Animation"), NULL, "animation", NULL}, { "animate-faster-action", NULL, N_("_Faster"), "plus", "animate-faster", G_CALLBACK (animate_faster)}, { "animate-slower-action", NULL, N_("_Slower"), "minus", "animate-slower", G_CALLBACK (animate_slower)}, }; static const char menu_tree[] = "\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ "; GtkWidget * create_menubar (GbkGame * game) { GtkWidget *menubar; GtkUIManager *menu_manager = gtk_ui_manager_new (); GtkActionGroup *action_group = gtk_action_group_new ("dialog-actions"); GtkActionGroup *game_action_group = gtk_action_group_new ("game-actions"); gtk_action_group_set_translation_domain (action_group, PACKAGE); gtk_action_group_set_translation_domain (game_action_group, PACKAGE); gtk_action_group_add_actions (action_group, action_entries, sizeof (action_entries) / sizeof (action_entries[0]), game->toplevel); gtk_action_group_add_actions (game_action_group, game_action_entries, sizeof (game_action_entries) / sizeof (game_action_entries[0]), game); gtk_ui_manager_insert_action_group (menu_manager, action_group, 0); gtk_ui_manager_insert_action_group (menu_manager, game_action_group, 0); if (0 == gtk_ui_manager_add_ui_from_string (menu_manager, menu_tree, strlen (menu_tree), NULL)) g_return_val_if_reached (NULL); startup_guile_scripts (menu_manager); menubar = gtk_ui_manager_get_widget (menu_manager, "/ui/MainMenu"); gtk_window_add_accel_group (GTK_WINDOW (game->toplevel), gtk_ui_manager_get_accel_group (menu_manager)); gtk_widget_show (menubar); return menubar; } enum { ACT_REWIND = 0, ACT_PREV, ACT_STOP, ACT_MARK, ACT_NEXT, ACT_PLAY, n_ACTS }; static void set_playbar_sensitivities (GbkGame * g, GtkAction ** acts) { gboolean play_state = (g->mode == MODE_PLAY); gtk_action_set_sensitive (acts[ACT_REWIND], !play_state && !gbk_game_at_start (g)); gtk_action_set_sensitive (acts[ACT_PREV], !play_state && !gbk_game_at_start (g)); gtk_action_set_sensitive (acts[ACT_PLAY], !play_state && !gbk_game_at_end (g)); gtk_action_set_sensitive (acts[ACT_NEXT], !play_state && !gbk_game_at_end (g)); gtk_action_set_sensitive (acts[ACT_STOP], play_state); } GtkWidget * create_play_toolbar (GbkGame * game) { int i; static GtkAction *acts[n_ACTS]; acts[ACT_REWIND] = gtk_action_new ("rewind", _("Rewind"), _("Go to the previous mark (or the beginning of the sequence of moves)"), GTK_STOCK_MEDIA_REWIND); acts[ACT_PREV] = gtk_action_new ("previous", _("Back"), _("Make one step backwards"), GTK_STOCK_MEDIA_PREVIOUS); acts[ACT_STOP] = gtk_action_new ("stop", _("Stop"), _("Stop running the sequence of moves"), GTK_STOCK_MEDIA_STOP); acts[ACT_MARK] = gtk_action_new ("mark", _("Mark"), _("Mark the current place in the sequence of moves"), GTK_STOCK_MEDIA_STOP); acts[ACT_NEXT] = gtk_action_new ("next", _("Forward"), _("Make one step forwards"), GTK_STOCK_MEDIA_NEXT); acts[ACT_PLAY] = gtk_action_new ("forward", _("Play"), _("Run forward through the sequence of moves"), GTK_STOCK_MEDIA_PLAY); GtkWidget *play_toolbar = gtk_toolbar_new (); set_playbar_sensitivities (game, acts); g_signal_connect (game, "queue-changed", G_CALLBACK (set_playbar_sensitivities), acts); gtk_toolbar_set_style (GTK_TOOLBAR (play_toolbar), GTK_TOOLBAR_BOTH); for (i = 0; i < n_ACTS; ++i) { gtk_toolbar_insert (GTK_TOOLBAR (play_toolbar), GTK_TOOL_ITEM (gtk_action_create_tool_item (acts[i])), -1); } g_signal_connect_swapped (acts[ACT_REWIND], "activate", G_CALLBACK (gbk_game_rewind), game); g_signal_connect_swapped (acts[ACT_STOP], "activate", G_CALLBACK (gbk_game_stop_replay), game); g_signal_connect_swapped (acts[ACT_NEXT], "activate", G_CALLBACK (gbk_game_next_move), game); g_signal_connect_swapped (acts[ACT_PREV], "activate", G_CALLBACK (gbk_game_prev_move), game); g_signal_connect_swapped (acts[ACT_MARK], "activate", G_CALLBACK (gbk_game_set_mark), game); g_signal_connect_swapped (acts[ACT_PLAY], "activate", G_CALLBACK (gbk_game_replay), game); gtk_widget_show_all (play_toolbar); return play_toolbar; } /* Popup an error dialog box */ void error_dialog (GtkWindow * parent, const gchar * format, ...) { va_list ap; GtkWidget *dialog; gchar *message; va_start (ap, format); message = g_strdup_vprintf (format, ap); va_end (ap); dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", message); g_free (message); gtk_window_set_title (GTK_WINDOW (dialog), _("Gnubik error")); gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } gnubik-2.4.3/src/colour-dialog.h0000644000175000017460000000164313070435673013441 00000000000000/* Colour Menu code. Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #ifndef COLOUR_DIALOG_H #define COLOUR_DIALOG_H #include #include "game.h" void colour_select_menu (GtkWidget *, GbkGame *); GdkPixbuf *create_pixbuf_from_file (const gchar * filename, GError ** gerr); #endif gnubik-2.4.3/src/game.c0000644000175000017460000002052413070435673011604 00000000000000/* Copyright (c) 2011 John Darrington This program 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 3 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, see . */ #include #include "game.h" static void on_move (GbkCube * cube, gpointer m, GbkGame * game); enum { QUEUE_CHANGED, MARK_SET, n_SIGNALS }; static guint signals[n_SIGNALS]; static void gbk_game_init (GbkGame * game) { game->mesg_id = 0; game->start_of_moves.next = &game->end_of_moves; gbk_game_reset (game); } void gbk_game_reset (GbkGame * game) { game->animate_complete_id = 0; game->mode = MODE_RECORD; gbk_game_delete_moves (game, game->start_of_moves.next); game->end_of_moves.prev = &game->start_of_moves; game->end_of_moves.next = NULL; game->end_of_moves.data = NULL; game->start_of_moves.prev = NULL; game->start_of_moves.next = &game->end_of_moves; game->start_of_moves.data = NULL; game->iter = &game->start_of_moves; game->posn = 0; game->total = 0; g_signal_emit (game, signals[QUEUE_CHANGED], 0); } enum { PROP_0 = 0, PROP_CUBE }; static void game_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GbkGame *game = GBK_GAME (object); switch (prop_id) { case PROP_CUBE: game->cube = GBK_CUBE (g_value_get_object (value)); g_signal_connect (game->cube, "move", G_CALLBACK (on_move), game); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }; } static void game_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GbkGame *game = GBK_GAME (object); switch (prop_id) { case PROP_CUBE: g_value_set_object (value, game->cube); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }; } static void gbk_game_class_init (GbkGameClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); gobject_class->set_property = game_set_property; gobject_class->get_property = game_get_property; GParamSpec *gbk_param_spec = g_param_spec_object ("cube", "Set the cube", "The cube for this game", GBK_TYPE_CUBE, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_CUBE, gbk_param_spec); signals[QUEUE_CHANGED] = g_signal_new ("queue-changed", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); signals[MARK_SET] = g_signal_new ("mark-set", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT); } G_DEFINE_TYPE (GbkGame, gbk_game, G_TYPE_OBJECT); GObject * gbk_game_new (GbkCube * cube) { return g_object_new (gbk_game_get_type (), "cube", cube, NULL); } void gbk_game_remove_view (GbkGame * game, GbkCubeview * cv) { GSList *element = g_slist_find (game->views, cv); if (element->data == game->masterview) g_critical ("Removing the master view"); game->views = g_slist_remove_link (game->views, element); } void gbk_game_add_view (GbkGame * game, GbkCubeview * cv, gboolean master) { game->views = g_slist_prepend (game->views, cv); if (master) game->masterview = cv; else { g_signal_connect_swapped (cv, "destroy", G_CALLBACK (gbk_game_remove_view), game); } } void gbk_game_set_mark (GbkGame * game) { game->iter->marked = TRUE; g_signal_emit (game, signals[MARK_SET], 0, game->posn); } gboolean gbk_game_at_end (GbkGame * game) { return (game->iter->next == &game->end_of_moves); } gboolean gbk_game_at_start (GbkGame * game) { return (game->iter == &game->start_of_moves); } /* Delete all the moves beginning at FROM */ void gbk_game_delete_moves (GbkGame * game, struct GbkList *from) { struct GbkList *n = from; struct GbkList *prev = from->prev; while (n != &game->end_of_moves) { struct GbkList *next = n->next; if (n == game->iter) game->iter = prev; move_unref (n->data); g_slice_free (struct GbkList, n); game->total--; n = next; } if (prev) prev->next = &game->end_of_moves; game->end_of_moves.prev = prev; } /* Insert MOVE into the queue before WHERE */ struct GbkList * gbk_game_insert_move (GbkGame * game, struct move_data *move, struct GbkList *where) { struct GbkList *before = where->prev; struct GbkList *n = g_slice_alloc0 (sizeof *n); if (where != &game->end_of_moves) { g_warning ("Inserting in middle of moves"); gbk_game_delete_moves (game, where); } n->prev = before; n->next = where; n->data = move_ref (move); n->marked = FALSE; if (before) before->next = n; if (game->start_of_moves.next == NULL) { game->start_of_moves.next = n; } where->prev = n; game->total++; return n; } static void on_move (GbkCube * cube, gpointer m, GbkGame * game) { struct move_data *move = m; if (game->mode != MODE_RECORD) return; if (game->animate_complete_id != 0) return; if (game->iter->next != &game->end_of_moves) gbk_game_delete_moves (game, game->iter->next); game->iter = gbk_game_insert_move (game, move, game->iter->next); game->posn++; g_signal_emit (game, signals[QUEUE_CHANGED], 0); } void gbk_game_rewind (GbkGame * game) { game->mode = MODE_REWIND; while (!gbk_game_at_start (game)) { const struct move_data *m = game->iter->data; struct move_data *mm = move_copy (m); mm->dir = !mm->dir; gbk_cube_rotate_slice (game->cube, mm); move_unref (mm); game->posn--; game->iter = game->iter->prev; if (game->iter->marked) break; } g_signal_emit (game, signals[QUEUE_CHANGED], 0); game->mode = MODE_RECORD; } typedef gboolean term_pred (GbkGame *); static void next_move (GbkGame * game, gboolean backwards) { struct move_data *m; /* Choose the terminal predicate. That is, when to stop moving. */ term_pred *terminal = backwards ? gbk_game_at_start : gbk_game_at_end; if (game->mode != MODE_PLAY || terminal (game)) { if (game->animate_complete_id != 0) g_signal_handler_disconnect (game->masterview, game->animate_complete_id); game->animate_complete_id = 0; game->mode = MODE_RECORD; g_signal_emit (game, signals[QUEUE_CHANGED], 0); return; } if (game->animate_complete_id == 0) { /* Single stepping */ game->mode = MODE_RECORD; game->animate_complete_id = g_signal_connect_swapped (game->masterview, "animation-complete", G_CALLBACK (next_move), game); } if (backwards) { m = move_copy (game->iter->data); m->dir = !m->dir; game->iter = game->iter->prev; game->posn--; } else { game->iter = game->iter->next; m = move_copy (game->iter->data); game->posn++; } gbk_cube_rotate_slice (game->cube, m); move_unref (m); g_signal_emit (game, signals[QUEUE_CHANGED], 0); } static void move_forward (GbkGame * game) { next_move (game, FALSE); } void gbk_game_stop_replay (GbkGame * game) { game->mode = MODE_RECORD; } void gbk_game_replay (GbkGame * game) { game->mode = MODE_PLAY; game->animate_complete_id = g_signal_connect_swapped (game->masterview, "animation-complete", G_CALLBACK (move_forward), game); move_forward (game); } void gbk_game_prev_move (GbkGame * game) { game->mode = MODE_PLAY; next_move (game, TRUE); } void gbk_game_next_move (GbkGame * game) { game->mode = MODE_PLAY; move_forward (game); } void gbk_game_dump_moves (GbkGame * game) { struct GbkList *n = game->start_of_moves.next; g_print ("Start %p\n", n); while (n != &game->end_of_moves) { if (n == game->iter) printf ("* "); else printf (" "); move_dump (n->data); n = n->next; } printf ("\n"); } gnubik-2.4.3/src/textures.h0000644000175000017460000000163113070435673012561 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 1998, 2003, 2011 John Darrington This program 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 3 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, see . */ #ifndef TEXTURES_H #define TEXTURES_H #include GLuint create_pattern_from_pixbuf (const GdkPixbuf * pixbuf, GError ** gerr); #endif gnubik-2.4.3/src/select.c0000644000175000017460000002023313070435673012147 00000000000000/* A system to permit user selection of a block and rotation axis of a magic cube. Copyright (C) 1998, 2003, 2011 John Darrington This program 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 3 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, see . */ #include #include "control.h" #include /* This library provides a means of picking a block using the mouse cursor. Two mutually co-operative mechanisms are used in this library. There is a timer callback, which occurs at regular intervals. There is also the mouse motion callback, which occurs whenever the mouse cursor is moving. If two consecutive timer callbacks occur, without and intervening mouse motion callback, then the cursor is assumed to be stationary. If a stationary mouse is detected, the program goes on to determine which block in the cube (if any) the cursor is located upon. */ #include "select.h" #include #include #include #include #include #include "drwBlock.h" #include "cubeview.h" #include "glarea.h" static gboolean detect_motion (GtkWidget * w, GdkEventMotion * event, gpointer user_data); static gboolean UnsetMotion (gpointer data); struct cublet_selection { guint timer; select_func *action; gpointer data; gint idle_threshold; double granularity; GtkWidget *w; gboolean motion; gboolean stop_detected; /* A copy of the last selection taken */ struct facet_selection current_selection; gint mouse_x; gint mouse_y; }; static gboolean key_press (GtkWidget *w, GdkEventKey *e, gpointer data) { struct cublet_selection *cs = data; if ( e->keyval != GDK_KEY_Shift_L && e->keyval != GDK_KEY_Shift_R ) return FALSE; selection_func (cs, w); return FALSE; } static void pickPolygons (GbkCubeview * cv, struct cublet_selection *cs, struct facet_selection *sel); /* Initialise the selection mechanism. Holdoff is the time for which the mouse must stay still, for anything to happen. Precision is the minimum distance it must have moved. DO_THIS is a pointer to a function to be called when a new block is selected. DATA is a data to be passed to DO_THIS*/ struct cublet_selection * select_create (GtkWidget * w, int holdoff, double precision, select_func * do_this, gpointer data) { struct cublet_selection *cs = g_malloc (sizeof *cs); cs->idle_threshold = holdoff; cs->granularity = precision; g_signal_connect (w, "motion-notify-event", G_CALLBACK (detect_motion), cs); g_signal_connect (w, "key-press-event", G_CALLBACK (key_press), cs); g_signal_connect (w, "key-release-event", G_CALLBACK (key_press), cs); cs->action = do_this; cs->data = data; cs->stop_detected = FALSE; cs->motion = FALSE; cs->timer = g_timeout_add (cs->idle_threshold, UnsetMotion, cs); cs->w = w; cs->current_selection.block = -1; cs->current_selection.face = -1; cs->current_selection.quadrant = -1; return cs; } void select_destroy (struct cublet_selection *cs) { select_disable (cs); g_free (cs); } void select_disable (struct cublet_selection *cs) { if (cs->timer) g_source_remove (cs->timer); cs->timer = 0; } void select_enable (struct cublet_selection *cs) { if (0 == cs->timer) cs->timer = g_timeout_add (cs->idle_threshold, UnsetMotion, cs); } /* This callback occurs whenever the mouse is moving */ static gboolean detect_motion (GtkWidget * w, GdkEventMotion * event, gpointer data) { struct cublet_selection *cs = data; if (event->type != GDK_MOTION_NOTIFY) return FALSE; cs->mouse_x = event->x; cs->mouse_y = event->y; cs->motion = TRUE; cs->stop_detected = FALSE; return FALSE; } /* This callback occurs at regular intervals. The period is determined by cs->idle_threshold. It checks to see if the mouse has moved, since the last call of this function. Post-condition: motion is FALSE. */ static gboolean UnsetMotion (gpointer data) { struct cublet_selection *cs = data; GbkCubeview *cv = GBK_CUBEVIEW (cs->data); if (cs->motion == FALSE) { /* if not moved since last time */ if (!cs->stop_detected) { /* in here, things happen upon the mouse stopping */ cs->stop_detected = TRUE; select_update (cv, cs); } } cs->motion = FALSE; return TRUE; } /* end UnsetMotion */ static int get_widget_height (GtkWidget * w) { GtkAllocation allocation; gtk_widget_get_allocation (w, &allocation); return allocation.height; } #include "select.h" #include #include #include #include #include #define BUFSIZE 512 static void choose_items (GLint hits, GLuint buffer[], struct facet_selection *); /* Identify the block at screen co-ordinates x, y . This func determines all candidate blocks. That is, all blocks which orthogonally project to x, y. It then calls choose_items, to determine which of them is closest to the screen. */ static void pickPolygons (GbkCubeview * cv, struct cublet_selection *cs, struct facet_selection *sel) { GLint height; GLint viewport[4]; GLuint selectBuf[BUFSIZE]; GLint hits; GtkWidget *w; if (!gdk_gl_drawable_make_current (cv->gldrawable, cv->glcontext)) { g_critical ("Cannot set gl drawable current\n"); return; } assert (cs->granularity > 0); w = cs->w; height = get_widget_height (w); glSelectBuffer (BUFSIZE, selectBuf); glRenderMode (GL_SELECT); glInitNames (); glPushName (0xFFFF); glMatrixMode (GL_PROJECTION); glPushMatrix (); glLoadIdentity (); glGetIntegerv (GL_VIEWPORT, viewport); gluPickMatrix ((GLdouble) cs->mouse_x, (GLdouble) (height - cs->mouse_y), cs->granularity, cs->granularity, viewport); perspectiveSet (&cv->scene); gbk_cubeview_model_view_init (cv); drawCube (cv->cube, TRUE, cv); glMatrixMode (GL_PROJECTION); glPopMatrix (); ERR_CHECK (""); hits = glRenderMode (GL_RENDER); choose_items (hits, selectBuf, sel); } /* Find out which of all the objects in buffer is the one with the lowest Z value. ie. closer in the depth buffer */ static void choose_items (GLint hits, GLuint buffer[], struct facet_selection *selection) { unsigned int i, j; GLuint names, *ptr; GLint closest[3] = { -1, -1, -1 }; float zvalue = FLT_MAX; float z1; #define SEL_BLOCK 0 #define SEL_FACE 1 #define SEL_QUAD 2 g_return_if_fail (hits >= 0); ptr = (GLuint *) buffer; for (i = 0; i < hits; i++) { names = *ptr++; z1 = (float) *ptr++ / 0x7fffffff; ptr++; /* we're not interested in the minimum zvalue */ if (z1 < zvalue) { zvalue = z1; for (j = 0; j < names; j++) { closest[j] = *ptr++; } } else { ptr += names; } } selection->block = closest[SEL_BLOCK]; selection->face = closest[SEL_FACE]; selection->quadrant = closest[SEL_QUAD]; #if DEBUG fprintf (stderr, "Selected block %d, face %d, quadrant %d\n", selection->block, selection->face, selection->quadrant); #endif } /* an accessor func to get the value of the currently selected items */ const struct facet_selection * select_get (const struct cublet_selection *cs) { return &cs->current_selection; } /* This func, determines which block the mouse is pointing at, and if it has changed, calls the function ptr "cs->action" */ void select_update (GbkCubeview * cv, struct cublet_selection *cs) { pickPolygons (cv, cs, &cs->current_selection); if (cs->action) cs->action (cs, cs->data); } gboolean select_is_selected (const struct cublet_selection *cs) { return cs->current_selection.quadrant != -1; } GtkWidget * cublet_selection_get_widget (const struct cublet_selection * cs) { return cs->w; } gnubik-2.4.3/src/quarternion.c0000644000175000017460000000706713070435673013251 00000000000000/* A little library to do quarternion arithmetic Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #include #include "quarternion.h" #include "txfm.h" #include #include void quarternion_set_to_unit (Quarternion * q) { q->w = 1; q->x = 0; q->y = 0; q->z = 0; } void quarternion_to_matrix (Matrix M, const Quarternion * q) { /* Diagonals ... */ matrix_set (M, 0, 0, q->w * q->w + q->x * q->x - q->y * q->y - q->z * q->z); matrix_set (M, 1, 1, q->w * q->w - q->x * q->x + q->y * q->y - q->z * q->z); matrix_set (M, 2, 2, q->w * q->w - q->x * q->x - q->y * q->y + q->z * q->z); matrix_set (M, MATRIX_DIM - 1, MATRIX_DIM - 1, q->w * q->w + q->x * q->x + q->y * q->y + q->z * q->z); /* Last row */ matrix_set (M, 0, MATRIX_DIM - 1, 0.0); matrix_set (M, 1, MATRIX_DIM - 1, 0.0); matrix_set (M, 2, MATRIX_DIM - 1, 0.0); /* Last Column */ matrix_set (M, MATRIX_DIM - 1, 0, 0.0); matrix_set (M, MATRIX_DIM - 1, 1, 0.0); matrix_set (M, MATRIX_DIM - 1, 2, 0.0); /* Others */ matrix_set (M, 0, 1, 2 * q->x * q->y + 2 * q->w * q->z); matrix_set (M, 0, 2, 2 * q->x * q->z - 2 * q->w * q->y); matrix_set (M, 1, 2, 2 * q->y * q->z + 2 * q->w * q->x); matrix_set (M, 1, 0, 2 * q->x * q->y - 2 * q->w * q->z); matrix_set (M, 2, 0, 2 * q->x * q->z + 2 * q->w * q->y); matrix_set (M, 2, 1, 2 * q->y * q->z - 2 * q->w * q->x); } void quarternion_from_rotation (Quarternion * q, const vector u, float theta) { const float radians = theta * M_PI / 180.0; q->w = cos (radians / 2.0); q->x = u[0] * sin (radians / 2.0); q->y = u[1] * sin (radians / 2.0); q->z = u[2] * sin (radians / 2.0); } void quarternion_dump (const Quarternion * q) { printf ("(%0.2f, %0.2f, %0.2f, %0.2f)\n", q->w, q->x, q->y, q->z); } void quarternion_get_inverse (Quarternion * inv, const Quarternion * q) { float ssq = 0.0; ssq += q->w * q->w; ssq += q->x * q->x; ssq += q->y * q->y; ssq += q->z * q->z; inv->w = q->w / ssq; inv->x = -q->x / ssq; inv->y = -q->y / ssq; inv->z = -q->z / ssq; } /* Pre multiply q1 by q2 */ void quarternion_pre_mult (Quarternion * q1, const Quarternion * q2) { float dot_product; vector cross_product; float s1 = q1->w; float s2 = q2->w; /* printf ("Q mult\n"); quarternion_print (q1); quarternion_print (q2); */ dot_product = q1->x * q2->x + q1->y * q2->y + q1->z * q2->z; /* printf ("Dot product is %f\n", dot_product); */ q1->w = q1->w * q2->w; q1->w -= dot_product; cross_product[0] = q1->y * q2->z - q1->z * q2->y; cross_product[1] = q1->z * q2->x - q1->x * q2->z; cross_product[2] = q1->x * q2->y - q1->y * q2->x; /* printf ("Cross product is %f, %f, %f\n", cross_product[0], cross_product[1], cross_product[2]); */ q1->x = s1 * q2->x + s2 * q1->x + cross_product[0]; q1->y = s1 * q2->y + s2 * q1->y + cross_product[1]; q1->z = s1 * q2->z + s2 * q1->z + cross_product[2]; } gnubik-2.4.3/src/control.h0000644000175000017460000000176113070435673012362 00000000000000/* Control functions for the GNUbik Cube Copyright (C) 1998, 2011 John Darrington This program 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 3 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, see . */ #ifndef CONTROL_H #define CONTROL_H #include struct display_context; struct cublet_selection; /* This func is called whenever a new set of polygons have been selected. */ void selection_func (struct cublet_selection *, gpointer data); #endif gnubik-2.4.3/src/cubeview.c0000644000175000017460000006236413070435673012514 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 2003, 2004, 2009, 2011 John Darrington This program 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 3 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, see . */ #include #include "cubeview.h" #include "select.h" #include "control.h" #include "drwBlock.h" #include #include "glarea.h" #include "textures.h" #include static void realize (GtkWidget * w); static void size_allocate (GtkWidget * w, GtkAllocation * alloc); static gboolean expose (GtkWidget * w, GdkEventExpose * event); static GLboolean have_accumulation_buffer (void); static gboolean on_mouse_button (GtkWidget * w, GdkEventButton * event, gpointer data); static void cubeview_generate_texname (GbkCubeview * cubeview, int i); /* Error string display. This is always called by a macro wrapper, to set the file and line_no opts parameters */ void error_check (const char *file, int line_no, const char *string) { GLenum err_state; if (GL_NO_ERROR != (err_state = glGetError ())) g_print ("%s:%d %s: %s\n", file, line_no, string, gluErrorString (err_state)); } enum { PROP_0 = 0, PROP_CUBE, PROP_ASPECT, PROP_FQ, PROP_COL0, PROP_COL1, PROP_COL2, PROP_COL3, PROP_COL4, PROP_COL5, PROP_IMG0, PROP_IMG1, PROP_IMG2, PROP_IMG3, PROP_IMG4, PROP_IMG5, PROP_SFC0, PROP_SFC1, PROP_SFC2, PROP_SFC3, PROP_SFC4, PROP_SFC5 }; static void animate_move (GbkCubeview * dc, const struct move_data *move); static void on_move (GbkCube * cube, struct move_data *move, GbkCubeview * cv) { animate_move (cv, move); } static gboolean unset_rotating_flag (gpointer data) { GbkCubeview *cv = data; cv->is_rotating = FALSE; gbk_cubeview_redisplay (cv); return FALSE; } static void on_rotate (GbkCubeview * cv) { if (cv->rot_timer != 0) g_source_remove (cv->rot_timer); cv->is_rotating = TRUE; cv->rot_timer = g_timeout_add (cv->picture_rate * 4, unset_rotating_flag, cv); gbk_cubeview_redisplay (cv); } static void cubeview_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GbkCubeview *cubeview = GBK_CUBEVIEW (object); switch (prop_id) { case PROP_CUBE: { cubeview->cube = g_value_get_object (value); scene_init (cubeview); if (cubeview->dim_id) g_signal_handler_disconnect (cubeview->cube, cubeview->dim_id); cubeview->dim_id = g_signal_connect_swapped (cubeview->cube, "notify::dimensions", G_CALLBACK (scene_init), cubeview); if (cubeview->move_id) g_signal_handler_disconnect (cubeview->cube, cubeview->move_id); cubeview->move_id = g_signal_connect (cubeview->cube, "move", G_CALLBACK (on_move), cubeview); if (cubeview->rotate_id) g_signal_handler_disconnect (cubeview->cube, cubeview->rotate_id); cubeview->rotate_id = g_signal_connect_swapped (cubeview->cube, "rotate", G_CALLBACK (on_rotate), cubeview); } break; case PROP_ASPECT: { gfloat *asp = g_value_get_pointer (value); gfloat v[4]; gfloat angle = asp[0]; v[0] = asp[1]; v[1] = asp[2]; v[2] = asp[3]; v[3] = 0; quarternion_from_rotation (&cubeview->qView, v, angle); } break; case PROP_FQ: cubeview->frameQty = g_value_get_int (value); break; case PROP_COL0: case PROP_COL1: case PROP_COL2: case PROP_COL3: case PROP_COL4: case PROP_COL5: { GdkColor *col = g_value_get_boxed (value); GLfloat *v = cubeview->colour[prop_id - PROP_COL0]; v[0] = col->red / (GLfloat) 0xffff; v[1] = col->green / (GLfloat) 0xffff; v[2] = col->blue / (GLfloat) 0xffff; gbk_cubeview_redisplay (cubeview); } break; case PROP_IMG0: case PROP_IMG1: case PROP_IMG2: case PROP_IMG3: case PROP_IMG4: case PROP_IMG5: { cubeview->pixbuf[prop_id - PROP_IMG0] = g_value_get_object (value); glDeleteTextures (1, &cubeview->texName[prop_id - PROP_IMG0]); cubeview->texName[prop_id - PROP_IMG0] = -1; if (gtk_widget_get_realized (GTK_WIDGET (cubeview))) cubeview_generate_texname (cubeview, prop_id - PROP_IMG0); gbk_cubeview_redisplay (cubeview); } break; case PROP_SFC0: case PROP_SFC1: case PROP_SFC2: case PROP_SFC3: case PROP_SFC4: case PROP_SFC5: { cubeview->surface[prop_id - PROP_SFC0] = g_value_get_enum (value); if (cubeview->surface[prop_id - PROP_SFC0] == SURFACE_COLOURED) { cubeview->pixbuf[prop_id - PROP_SFC0] = NULL; glDeleteTextures (1, &cubeview->texName[prop_id - PROP_SFC0]); cubeview->texName[prop_id - PROP_SFC0] = -1; } gbk_cubeview_redisplay (cubeview); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }; } static void cubeview_generate_texname (GbkCubeview * cubeview, int i) { GError *gerr = NULL; g_return_if_fail (gtk_widget_get_realized (GTK_WIDGET (cubeview))); if (cubeview->pixbuf[i] == NULL) return; cubeview->texName[i] = create_pattern_from_pixbuf (cubeview->pixbuf[i], &gerr); if (gerr) g_warning ("Cannot generate texture for face %d: %s", i, gerr->message); } static void cubeview_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GbkCubeview *cubeview = GBK_CUBEVIEW (object); switch (prop_id) { case PROP_CUBE: g_value_set_object (value, cubeview->cube); break; case PROP_COL0: case PROP_COL1: case PROP_COL2: case PROP_COL3: case PROP_COL4: case PROP_COL5: { GLfloat *v = cubeview->colour[prop_id - PROP_COL0]; GdkColor col; col.red = v[0] * 0xffff; col.green = v[1] * 0xffff; col.blue = v[2] * 0xffff; g_value_set_boxed (value, &col); } break; case PROP_FQ: g_value_set_int (value, cubeview->frameQty); break; case PROP_IMG0: case PROP_IMG1: case PROP_IMG2: case PROP_IMG3: case PROP_IMG4: case PROP_IMG5: g_value_set_object (value, cubeview->pixbuf[prop_id - PROP_IMG0]); break; case PROP_SFC0: case PROP_SFC1: case PROP_SFC2: case PROP_SFC3: case PROP_SFC4: case PROP_SFC5: g_value_set_enum (value, cubeview->surface[prop_id - PROP_SFC0]); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }; } enum { ANIMATION_COMPLETE, n_SIGNALS }; static guint signals[n_SIGNALS]; static GtkWidgetClass *parent_class = NULL; static void gbk_cubeview_finalize (GObject * cv); static void gbk_cubeview_class_init (GbkCubeviewClass * klass) { gint i; GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GParamSpec *cube_param_spec; GParamSpec *aspect_param_spec; GParamSpec *fq_param_spec; parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = gbk_cubeview_finalize; gobject_class->set_property = cubeview_set_property; gobject_class->get_property = cubeview_get_property; fq_param_spec = g_param_spec_int ("animation-frames", "Animation Frames", "How many frames to display per animation", 0, 255, 2, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_FQ, fq_param_spec); cube_param_spec = g_param_spec_object ("cube", "Cube", "The cube which this widget views", GBK_TYPE_CUBE, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_CUBE, cube_param_spec); aspect_param_spec = g_param_spec_pointer ("aspect", "Aspect", "The aspect from which this view sees the cube", G_PARAM_WRITABLE); for (i = 0; i < 6; ++i) { gchar *name = g_strdup_printf ("color%d", i); gchar *nick = g_strdup_printf ("The colour for face %d", i); gchar *blurb = g_strdup_printf ("The GdkColor describing the colour for face %d", i); GParamSpec *colour = g_param_spec_boxed (name, nick, blurb, GDK_TYPE_COLOR, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_COL0 + i, colour); g_free (name); g_free (nick); g_free (blurb); } for (i = 0; i < 6; ++i) { gchar *name = g_strdup_printf ("image%d", i); gchar *nick = g_strdup_printf ("The image for face %d", i); gchar *blurb = g_strdup_printf ("A GdkPixbuf to be rendered on face %d", i); GParamSpec *pixbuf = g_param_spec_object (name, nick, blurb, GDK_TYPE_PIXBUF, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_IMG0 + i, pixbuf); g_free (name); g_free (nick); g_free (blurb); } for (i = 0; i < 6; ++i) { gchar *name = g_strdup_printf ("surface%d", i); gchar *nick = g_strdup_printf ("The surface for face %d", i); gchar *blurb = g_strdup_printf ("How the image (if any) should be rendered to face %d", i); GParamSpec *sfc = g_param_spec_enum (name, nick, blurb, GBK_TYPE_SURFACE, SURFACE_COLOURED, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_SFC0 + i, sfc); g_free (name); g_free (nick); g_free (blurb); } g_object_class_install_property (gobject_class, PROP_ASPECT, aspect_param_spec); signals[ANIMATION_COMPLETE] = g_signal_new ("animation-complete", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); widget_class->realize = realize; widget_class->size_allocate = size_allocate; widget_class->expose_event = expose; GdkScreen *screen = gdk_screen_get_default (); GdkWindow *root = gdk_screen_get_root_window (screen); const GdkGLConfigMode mode[] = { GDK_GL_MODE_RGB | GDK_GL_MODE_DOUBLE | GDK_GL_MODE_DEPTH | GDK_GL_MODE_ACCUM, GDK_GL_MODE_RGB | GDK_GL_MODE_DOUBLE | GDK_GL_MODE_DEPTH, }; for (i = 0; i < sizeof (mode) / sizeof (mode[0]); ++i) { klass->glconfig = gdk_gl_config_new_by_mode_for_screen (screen, mode[i]); if (klass->glconfig != NULL) break; else g_warning ("Cannot get visual for mode 0x%0x", mode[i]); } if (!klass->glconfig) g_error ("No suitable visual found."); GdkGLWindow *rootglwin = gdk_gl_window_new (klass->glconfig, root, 0); klass->master_ctx = gdk_gl_context_new (GDK_GL_DRAWABLE (rootglwin), 0, TRUE, GDK_GL_RGBA_TYPE); g_object_unref (rootglwin); } static void initialize_gl_capability (GtkWidget * glxarea) { GbkCubeviewClass *klass = GBK_CUBEVIEW_CLASS (G_OBJECT_GET_CLASS (glxarea)); gtk_widget_set_gl_capability (glxarea, klass->glconfig, klass->master_ctx, TRUE, GDK_GL_RGBA_TYPE); } static gboolean grab_focus (GtkWidget * widget, GdkEventCrossing * event, gpointer data) { gtk_widget_grab_focus (widget); return FALSE; } static gboolean cube_orientate_mouse (GtkWidget * w, GdkEventMotion * event, gpointer data) { gint xmotion = 0; gint ymotion = 0; GbkCubeview *dc = GBK_CUBEVIEW (w); GdkWindow *window = gtk_widget_get_window (w); GdkModifierType mm; gdk_window_get_pointer (window, NULL, NULL, &mm); if (!(GDK_BUTTON1_MASK & mm)) return FALSE; if (dc->last_mouse_x >= 0) xmotion = event->x - dc->last_mouse_x; if (dc->last_mouse_y >= 0) ymotion = event->y - dc->last_mouse_y; dc->last_mouse_x = event->x; dc->last_mouse_y = event->y; if (ymotion > 0) gbk_cubeview_rotate_cube (dc, 0, 1); if (ymotion < 0) gbk_cubeview_rotate_cube (dc, 0, 0); if (xmotion > 0) gbk_cubeview_rotate_cube (dc, 1, 1); if (xmotion < 0) gbk_cubeview_rotate_cube (dc, 1, 0); return FALSE; } /* orientate the whole cube with the arrow keys */ static gboolean cube_orientate_keys (GtkWidget * w, GdkEventKey * event, gpointer data) { GbkCubeview *dc = GBK_CUBEVIEW (w); const int shifted = event->state & GDK_SHIFT_MASK; int axis; int dir; switch (event->keyval) { case GDK_KEY_Right: if (shifted) { dir = 0; axis = 2; } else { dir = 1; axis = 1; } break; case GDK_KEY_Left: if (shifted) { dir = 1; axis = 2; } else { dir = 0; axis = 1; } break; case GDK_KEY_Up: axis = 0; dir = 0; break; case GDK_KEY_Down: axis = 0; dir = 1; break; default: return FALSE; } gbk_cubeview_rotate_cube (dc, axis, dir); /* We return TRUE here (disabling other event handlers) otherwise other widgets can steal the keyboard focus from our glwidget */ return TRUE; } /* Rotate the cube about the z axis (relative to the viewer ) */ static gboolean z_rotate (GtkWidget * w, GdkEventScroll * event, gpointer data) { GbkCubeview *dc = GBK_CUBEVIEW (w); gbk_cubeview_rotate_cube (dc, 2, !event->direction); gbk_cubeview_redisplay (dc); return FALSE; } static gboolean on_crossing (GtkWidget * widget, GdkEventCrossing * event, gpointer data) { struct cublet_selection *cs = data; if (event->type == GDK_ENTER_NOTIFY) select_enable (cs); if (event->type == GDK_LEAVE_NOTIFY) select_disable (cs); return TRUE; } /* Disable / Enable the selection based on the state of button 1 */ static gboolean enable_disable_selection (GtkWidget * w, GdkEventButton * event, gpointer data) { struct cublet_selection *cs = data; if (event->button != 1) return FALSE; if (event->type == GDK_BUTTON_PRESS) { select_disable (cs); } else if (event->type == GDK_BUTTON_RELEASE) { select_enable (cs); } return FALSE; } static void gbk_cubeview_finalize (GObject * o) { GbkCubeview *cv = GBK_CUBEVIEW (o); select_destroy (cv->cs); if (cv->dim_id) g_signal_handler_disconnect (cv->cube, cv->dim_id); if (cv->rotate_id) g_signal_handler_disconnect (cv->cube, cv->rotate_id); if (cv->move_id) g_signal_handler_disconnect (cv->cube, cv->move_id); if (cv->idle_id) g_source_remove (cv->idle_id); if (cv->animation_timeout) g_source_remove (cv->animation_timeout); } static void gbk_cubeview_init (GbkCubeview * dc) { dc->cs = NULL; dc->pending_movement = NULL; quarternion_set_to_unit (&dc->qView); initialize_gl_capability (GTK_WIDGET (dc)); dc->glcontext = NULL; dc->gldrawable = NULL; dc->idle_id = 0; dc->rotate_id = 0; dc->move_id = 0; dc->dim_id = 0; dc->picture_rate = 40; dc->frameQty = 2; dc->animation_angle = 0; dc->animation_timeout = 0; gtk_widget_add_events (GTK_WIDGET (dc), GDK_KEY_PRESS_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK /* | GDK_BUTTON_MOTION_MASK */ | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_VISIBILITY_NOTIFY_MASK | GDK_POINTER_MOTION_MASK); gtk_widget_set_can_focus (GTK_WIDGET (dc), TRUE); dc->cs = select_create (GTK_WIDGET (dc), 50, 1, selection_func, dc); /* Grab the keyboard focus whenever the mouse enters the widget */ g_signal_connect (dc, "enter-notify-event", G_CALLBACK (grab_focus), NULL); g_signal_connect (dc, "key-press-event", G_CALLBACK (cube_orientate_keys), NULL); g_signal_connect (dc, "motion-notify-event", G_CALLBACK (cube_orientate_mouse), NULL); g_signal_connect (dc, "scroll-event", G_CALLBACK (z_rotate), NULL); g_signal_connect (dc, "leave-notify-event", G_CALLBACK (on_crossing), dc->cs); g_signal_connect (dc, "enter-notify-event", G_CALLBACK (on_crossing), dc->cs); g_signal_connect (dc, "button-press-event", G_CALLBACK (enable_disable_selection), dc->cs); g_signal_connect (dc, "button-release-event", G_CALLBACK (enable_disable_selection), dc->cs); g_signal_connect (dc, "button-press-event", G_CALLBACK (on_mouse_button), dc->cs); dc->colour[0][0] = 1.0; dc->colour[1][1] = 1.0; dc->colour[2][2] = 1.0; dc->colour[3][1] = 1.0; dc->colour[3][2] = 1.0; dc->colour[4][0] = 1.0; dc->colour[4][2] = 1.0; dc->colour[5][0] = 1.0; dc->colour[5][1] = 1.0; dc->pixbuf[0] = NULL; dc->pixbuf[1] = NULL; dc->pixbuf[2] = NULL; dc->pixbuf[3] = NULL; dc->pixbuf[4] = NULL; dc->pixbuf[5] = NULL; dc->texName[0] = -1; dc->texName[1] = -1; dc->texName[2] = -1; dc->texName[3] = -1; dc->texName[4] = -1; dc->texName[5] = -1; dc->is_rotating = FALSE; dc->rot_timer = 0; } G_DEFINE_TYPE (GbkCubeview, gbk_cubeview, GTK_TYPE_DRAWING_AREA); GtkWidget * gbk_cubeview_new (GbkCube * cube) { return GTK_WIDGET (g_object_new (gbk_cubeview_get_type (), "cube", cube, NULL)); } static display display_anti_alias; static display display_raw; /* Resize callback. */ static void size_allocate (GtkWidget * w, GtkAllocation * alloc) { GbkCubeview *dc = GBK_CUBEVIEW (w); GLint min_dim; gint height = alloc->height; gint width = alloc->width; if (!gtk_widget_get_realized (w)) return; if (GTK_WIDGET_CLASS (parent_class)->size_allocate) GTK_WIDGET_CLASS (parent_class)->size_allocate (w, alloc); if (!gdk_gl_drawable_gl_begin (dc->gldrawable, dc->glcontext)) return; min_dim = (width < height) ? width : height; /* Ensure that cube is always the same proportions */ glViewport ((width - min_dim) / 2, (height - min_dim) / 2, min_dim, min_dim); } static gboolean handleRedisplay (gpointer data) { GbkCubeview *cv = data; if (cv->is_rotating || !have_accumulation_buffer ()) display_raw (cv); else display_anti_alias (cv); g_source_remove (cv->idle_id); cv->idle_id = 0; return TRUE; } void gbk_cubeview_redisplay (GbkCubeview * cv) { if (0 == cv->idle_id) cv->idle_id = g_idle_add (handleRedisplay, cv); } /* Expose callback. Just redraw the scene */ static gboolean expose (GtkWidget * w, GdkEventExpose * event) { GbkCubeview *dc = GBK_CUBEVIEW (w); if (GTK_WIDGET_CLASS (parent_class)->expose_event) if (GTK_WIDGET_CLASS (parent_class)->expose_event (w, event)) return TRUE; gbk_cubeview_redisplay (dc); return FALSE; } static void realize (GtkWidget * w) { GbkCubeview *dc = GBK_CUBEVIEW (w); int i; if (GTK_WIDGET_CLASS (parent_class)->realize) GTK_WIDGET_CLASS (parent_class)->realize (w); dc->glcontext = gtk_widget_get_gl_context (w); dc->gldrawable = gtk_widget_get_gl_drawable (w); if (!gdk_gl_drawable_gl_begin (dc->gldrawable, dc->glcontext)) { g_critical ("Cannot initialise gl drawable\n"); return; } for (i = 0; i < 6; ++i) cubeview_generate_texname (dc, i); gtk_widget_set_size_request (w, 300, 300); dc->last_mouse_x = -1; dc->last_mouse_y = -1; gdk_gl_drawable_gl_end (dc->gldrawable); dc->background_cursor = gdk_cursor_new_for_display (gtk_widget_get_display (w), GDK_CROSSHAIR); } /* Return true iff there is an accumulation buffer which is usable */ static GLboolean have_accumulation_buffer (void) { GLint x; glGetIntegerv (GL_ACCUM_BLUE_BITS, &x); if (x < 3) return GL_FALSE; glGetIntegerv (GL_ACCUM_RED_BITS, &x); if (x < 3) return GL_FALSE; glGetIntegerv (GL_ACCUM_GREEN_BITS, &x); if (x < 3) return GL_FALSE; return GL_TRUE; } void error_check (const char *file, int line_no, const char *string); static void render_scene (GbkCubeview * cv, GLint jitter) { projection_init (&cv->scene, jitter); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gbk_cubeview_model_view_init (cv); ERR_CHECK ("Error in display"); drawCube (cv->cube, FALSE, cv); ERR_CHECK ("Error in display"); } /* Reset the bit planes, and render the scene using the accumulation buffer for antialiasing*/ static void display_anti_alias (GbkCubeview * dc) { int jitter; if (!gdk_gl_drawable_make_current (dc->gldrawable, dc->glcontext)) { g_critical ("Cannot set gl drawable current\n"); return; } glClear (GL_ACCUM_BUFFER_BIT); ERR_CHECK ("Error in display"); for (jitter = 0; jitter < 8; ++jitter) { render_scene (dc, jitter); glAccum (GL_ACCUM, 1.0 / 8.0); } glAccum (GL_RETURN, 1.0); gdk_gl_drawable_swap_buffers (dc->gldrawable); } /* Reset the bit planes, and render the scene, without anti-aliasing. */ static void display_raw (GbkCubeview * dc) { if (!gdk_gl_drawable_make_current (dc->gldrawable, dc->glcontext)) { g_critical ("Cannot set gl drawable current\n"); return; } ERR_CHECK ("Error in display"); render_scene (dc, 0); gdk_gl_drawable_swap_buffers (dc->gldrawable); } void gbk_cubeview_set_frame_qty (GbkCubeview * dc, int frames) { g_object_set (dc, "animation-frames", frames, NULL); } gboolean gbk_cubeview_is_animating (GbkCubeview * dc) { return dc->current_move != NULL; } /* Wrapper to set the modelview matrix */ void gbk_cubeview_model_view_init (GbkCubeview * cv) { struct scene_view *scene = &cv->scene; GbkCube *cube = cv->cube; /* start with the cube slightly skew, so we can see all its aspects */ GLdouble cube_orientation[2] = { 15.0, 15.0 }; Matrix m; /* Update viewer position in modelview matrix */ glMatrixMode (GL_MODELVIEW); glLoadIdentity (); GLdouble eye = scene->bounding_sphere_radius + scene->cp_near; glTranslatef (0, 0, -eye); Quarternion o; quarternion_set_to_unit (&o); quarternion_pre_mult (&o, &cube->orientation); quarternion_pre_mult (&o, &cv->qView); quarternion_to_matrix (m, &o); glMultMatrixf (m); /* skew the cube */ glRotatef (cube_orientation[1], 1, 0, 0); /* horizontally */ glRotatef (cube_orientation[0], 0, 1, 0); /* vertically */ #if 0 /* * DM 3-Jan-2004 * * Add a couple of 90 degree turns to get the top and right faces in their * logical positions when the program starts up. */ glRotatef (90.0, 1, 0, 0); glRotatef (-90.0, 0, 0, 1); #endif } /* Rotate cube about axis (screen relative) */ void gbk_cubeview_rotate_cube (GbkCubeview * cv, int axis, int dir) { GbkCube *cube = cv->cube; /* how many degrees to turn the cube with each hit */ const GLdouble step = 2.0; vector v = { 0, 0, 0, 0 }; g_assert (axis >= 0); g_assert (axis < 3); if (dir) v[axis] = -1; else v[axis] = 1; /* We need to Transform v by the aspect of cv */ Matrix m; Quarternion q; quarternion_get_inverse (&q, &cv->qView); quarternion_to_matrix (m, &q); vector_transform_in_place (v, m); gbk_cube_rotate (cube, v, step); } /* Animation related stuff */ /* User Interface functions for the Cube Copyright (C) 1998, 2003 John Darrington 2004 John Darrington, Dale Mellor 2011 John Darrington */ static gboolean animate_callback (gpointer data); /* handle mouse clicks */ static gboolean on_mouse_button (GtkWidget * w, GdkEventButton * event, gpointer data) { GbkCubeview *cv = GBK_CUBEVIEW (w); struct cublet_selection *cs = data; if (event->type != GDK_BUTTON_PRESS) return FALSE; if (event->button != 1) return FALSE; /* Don't let a user make a move, whilst one is already in progress, otherwise the cube falls to bits. */ if (gbk_cubeview_is_animating (cv)) return FALSE; /* Force an update on the selection mechanism. This avoids annoying instances of moves occuring when a rotation was intended. (Happens when experienced users become too fast). */ select_update (cv, cs); /* Make a move */ if (select_is_selected (cs)) /* and tell the blocks.c library that a move has taken place */ gbk_cube_rotate_slice (cv->cube, cv->pending_movement); return FALSE; } /* Does exactly what it says on the tin :-) */ static void animate_move (GbkCubeview * cv, const struct move_data *move) { /* Abort any current animation */ if (cv->current_move) move_unref (cv->current_move); cv->current_move = move_ref (move); cv->animation_angle = 90.0 * move_turns (cv->current_move); cv->animation_timeout = g_timeout_add (cv->picture_rate, animate_callback, cv); } /* a timeout calls this func, to animate the cube */ static gboolean animate_callback (gpointer data) { GbkCubeview *cv = data; /* how many degrees motion per frame */ GLfloat increment = 90.0 / (cv->frameQty + 1); /* decrement the current angle */ cv->animation_angle -= increment; /* and redraw it */ gbk_cubeview_redisplay (cv); if (cv->animation_angle > 0) { /* call this timeout again */ cv->animation_timeout = g_timeout_add (cv->picture_rate, animate_callback, data); } else { /* we have finished the animation sequence now */ move_unref (cv->current_move); cv->current_move = NULL; g_signal_emit (cv, signals[ANIMATION_COMPLETE], 0); select_update (cv, cv->cs); cv->animation_timeout = 0; } return FALSE; } /* end animate () */ GType gbk_cubeview_surface_get_type (void) { static GType etype = 0; if (etype == 0) { static const GEnumValue values[] = { {SURFACE_COLOURED, "SURFACE_COLOURED", "Plain Surface"}, {SURFACE_TILED, "SURFACE_TILED", "Tiled Surface"}, {SURFACE_MOSAIC, "SURFACE_MOSAIC", "Mosaic Surface"}, {0, NULL, NULL} }; etype = g_enum_register_static (g_intern_static_string ("CubeviewSurface"), values); } return etype; } gnubik-2.4.3/src/colour-dialog.c0000644000175000017460000003137313070435673013437 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #include #include #include #include #include "colour-dialog.h" #include "drwBlock.h" #include "textures.h" #include "menus.h" #include "select.h" #include "cubeview.h" #include "swatch.h" #include #define BOX_PADDING 5 #include #define _(String) gettext (String) #define N_(String) (String) #define SWATCH_WIDTH 64 #define SWATCH_HEIGHT 64 GdkPixbuf * create_pixbuf_from_file (const gchar * filename, GError ** gerr) { GdkPixbuf *pixbuf; GdkPixbuf *unscaled_pixbuf = gdk_pixbuf_new_from_file (filename, gerr); if (*gerr) return 0; /* We must scale the image, because Mesa/OpenGL insists on it being of size 2^n ( where n is integer ) */ pixbuf = gdk_pixbuf_scale_simple (unscaled_pixbuf, SWATCH_WIDTH, SWATCH_HEIGHT, GDK_INTERP_NEAREST); g_object_unref (unscaled_pixbuf); unscaled_pixbuf = 0; return pixbuf; } struct colour_dialog_state { GbkSwatch *selected_swatch; GtkWidget *swatches[6]; GtkWidget *colour_selector; GSList *button_group; GtkWidget *button_plain; GtkWidget *button_tile; GtkWidget *button_mosaic; }; static void update_radio_buttons (struct colour_dialog_state *cds); static void set_swatch_colour (GtkColorSelection * cs, gpointer data) { struct colour_dialog_state *cds = data; GdkColor c; gtk_color_selection_get_current_color (cs, &c); g_object_set (cds->selected_swatch, "color", &c, NULL); } /* Called when a swatch button is clicked. */ static void select_swatch (GtkToggleButton * w, gpointer data) { GdkColor *colour; gboolean active = gtk_toggle_button_get_active (w); if (!active) return; int i; struct colour_dialog_state *cds = data; for (i = 0; i < 6; ++i) { GtkToggleButton *b = GTK_TOGGLE_BUTTON (cds->swatches[i]); if (w == b) cds->selected_swatch = GBK_SWATCH (w); else gtk_toggle_button_set_active (b, FALSE); } g_object_get (w, "color", &colour, NULL); gtk_color_selection_set_current_color (GTK_COLOR_SELECTION (cds->colour_selector), colour); update_radio_buttons (cds); } static void update_radio_buttons (struct colour_dialog_state *cds) { GbkSwatch *ss = cds->selected_swatch; gtk_widget_set_sensitive (cds->button_plain, ss->stype != SURFACE_COLOURED); gtk_widget_set_sensitive (cds->button_tile, ss->stype != SURFACE_COLOURED); gtk_widget_set_sensitive (cds->button_mosaic, ss->stype != SURFACE_COLOURED); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cds->button_plain), (ss->stype == SURFACE_COLOURED)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cds->button_tile), (ss->stype == SURFACE_TILED)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cds->button_mosaic), (ss->stype == SURFACE_MOSAIC)); } static void update_preview_cb (GtkFileChooser * fc, gpointer data) { char *filename; GdkPixbuf *pixbuf; GtkWidget *image_preview = GTK_WIDGET (data); filename = gtk_file_chooser_get_preview_filename (fc); if (filename == NULL) return; pixbuf = gdk_pixbuf_new_from_file_at_size (filename, 128, 128, NULL); g_free (filename); gtk_image_set_from_pixbuf (GTK_IMAGE (image_preview), pixbuf); gtk_file_chooser_set_preview_widget_active (fc, pixbuf != NULL); if (pixbuf) g_object_unref (pixbuf); } /* Display a dialog box to set the image */ static void choose_image (GtkWidget * w, gpointer data) { GtkWidget *fc; GtkWidget *image_preview; GtkFileFilter *all_files_filter; GtkFileFilter *all_images_filter; gint response; struct colour_dialog_state *cds = data; GtkWindow *parent = NULL; fc = gtk_file_chooser_dialog_new (_("Image Selector"), parent, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); gtk_window_set_icon_name (GTK_WINDOW (fc), "gnubik"); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc), g_get_home_dir ()); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (fc), FALSE); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (fc), TRUE); gtk_file_chooser_set_show_hidden (GTK_FILE_CHOOSER (fc), FALSE); /* Thumbnail preview of the image during selection */ image_preview = gtk_image_new (); gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (fc), image_preview); g_signal_connect (GTK_FILE_CHOOSER (fc), "update-preview", G_CALLBACK (update_preview_cb), image_preview); /* File format filters. Probably just All Images is enough */ all_images_filter = gtk_file_filter_new (); gtk_file_filter_add_pixbuf_formats (all_images_filter); /* TRANSLATORS: "All Images" implies nothing but images! */ gtk_file_filter_set_name (all_images_filter, _("All Images")); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fc), all_images_filter); all_files_filter = gtk_file_filter_new (); gtk_file_filter_add_pattern (all_files_filter, "*"); gtk_file_filter_set_name (all_files_filter, _("All Files")); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (fc), all_files_filter); gtk_window_set_transient_for (GTK_WINDOW (fc), parent); gtk_widget_show (fc); response = gtk_dialog_run (GTK_DIALOG (fc)); if (response != GTK_RESPONSE_OK) { gtk_widget_destroy (fc); return; } gchar *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (fc)); GError *gerr = NULL; GdkPixbuf *pixbuf = create_pixbuf_from_file (filename, &gerr); g_free (filename); if (gerr) { g_print ("%s\n", gerr->message); g_clear_error (&gerr); goto end; } g_object_set (cds->selected_swatch, "texture", pixbuf, NULL); update_radio_buttons (cds); end: gtk_widget_destroy (fc); } static void set_tiled (GtkToggleButton * b, gpointer data) { struct colour_dialog_state *cds = data; if (!gtk_toggle_button_get_active (b)) return; g_object_set (cds->selected_swatch, "surface", SURFACE_TILED, NULL); } static void set_mosaic (GtkToggleButton * b, gpointer data) { struct colour_dialog_state *cds = data; if (!gtk_toggle_button_get_active (b)) return; g_object_set (cds->selected_swatch, "surface", SURFACE_MOSAIC, NULL); } static void set_plain (GtkToggleButton * b, gpointer data) { struct colour_dialog_state *cds = data; if (!gtk_toggle_button_get_active (b)) return; g_object_set (cds->selected_swatch, "surface", SURFACE_COLOURED, NULL); update_radio_buttons (cds); } void colour_select_menu (GtkWidget * w, GbkGame * game) { int i; GtkWidget *table; struct colour_dialog_state *cds = g_malloc (sizeof *cds); cds->colour_selector = gtk_color_selection_new (); GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Colour selector"), game->toplevel, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); GtkWidget *hbox_swatch = gtk_hbox_new (FALSE, BOX_PADDING); GtkWidget *hbox_cs = gtk_hbox_new (FALSE, BOX_PADDING); GtkWidget *image_select_vbox = gtk_vbox_new (FALSE, BOX_PADDING); GtkWidget *image_select_hbox = gtk_hbox_new (FALSE, BOX_PADDING); GtkWidget *frame = gtk_frame_new (_("Image")); GtkWidget *button_use_image = gtk_button_new_with_mnemonic (_("Se_lect")); gtk_color_selection_set_has_opacity_control (GTK_COLOR_SELECTION (cds->colour_selector), FALSE); gtk_window_set_icon_name (GTK_WINDOW (dialog), "gnubik"); gtk_widget_set_tooltip_text (button_use_image, _("Select an image file")); cds->button_tile = gtk_radio_button_new_with_mnemonic (0, _("_Tiled")); gtk_widget_set_tooltip_text (cds->button_tile, _("Place a copy of the image on each block")); cds->button_mosaic = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (cds->button_tile), _("_Mosaic")); gtk_widget_set_tooltip_text (cds->button_mosaic, _ ("Place a copy of the image across the entire face of the cube")); cds->button_plain = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (cds->button_tile), _("_Plain")); gtk_widget_set_tooltip_text (cds->button_plain, _("Remove image from the cube face")); g_signal_connect (cds->button_mosaic, "toggled", G_CALLBACK (set_mosaic), cds); g_signal_connect (cds->button_tile, "toggled", G_CALLBACK (set_tiled), cds); g_signal_connect (cds->button_plain, "toggled", G_CALLBACK (set_plain), cds); cds->button_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (cds->button_mosaic)); gtk_widget_set_sensitive (cds->button_tile, FALSE); gtk_widget_set_sensitive (cds->button_mosaic, FALSE); gtk_widget_set_sensitive (cds->button_plain, FALSE); gtk_box_pack_start (GTK_BOX (image_select_vbox), button_use_image, FALSE, TRUE, BOX_PADDING); gtk_box_pack_start (GTK_BOX (image_select_vbox), cds->button_tile, FALSE, TRUE, BOX_PADDING); gtk_box_pack_start (GTK_BOX (image_select_vbox), cds->button_mosaic, FALSE, TRUE, BOX_PADDING); gtk_box_pack_start (GTK_BOX (image_select_vbox), cds->button_plain, FALSE, TRUE, BOX_PADDING); gtk_box_pack_start (GTK_BOX (image_select_hbox), image_select_vbox, TRUE, TRUE, BOX_PADDING); gtk_container_add (GTK_CONTAINER (frame), image_select_hbox); table = gtk_table_new (2, 3, TRUE); cds->selected_swatch = NULL; for (i = 0; i < 6; ++i) { cds->swatches[i] = gbk_swatch_new (); GdkColor *col = NULL; GdkPixbuf *pixbuf = NULL; enum surface surface = 0; gchar prop[10]; snprintf (prop, 10, "color%d", i); g_object_get (game->masterview, prop, &col, NULL); g_object_set (cds->swatches[i], "color", col, NULL); snprintf (prop, 10, "image%d", i); g_object_get (game->masterview, prop, &pixbuf, NULL); g_object_set (cds->swatches[i], "texture", pixbuf, NULL); snprintf (prop, 10, "surface%d", i); g_object_get (game->masterview, prop, &surface, NULL); g_object_set (cds->swatches[i], "surface", surface, NULL); g_signal_connect (cds->swatches[i], "toggled", G_CALLBACK (select_swatch), cds); gtk_table_attach (GTK_TABLE (table), cds->swatches[i], i / 2, i / 2 + 1, i % 2, i % 2 + 1, GTK_EXPAND, GTK_EXPAND, 0, 0); } gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cds->swatches[0]), TRUE); g_signal_connect (cds->colour_selector, "color-changed", G_CALLBACK (set_swatch_colour), cds); gtk_container_add (GTK_CONTAINER (hbox_swatch), table); gtk_box_pack_start (GTK_BOX (hbox_swatch), frame, TRUE, TRUE, BOX_PADDING); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), hbox_swatch, TRUE, TRUE, BOX_PADDING); gtk_box_pack_start (GTK_BOX (hbox_cs), cds->colour_selector, TRUE, TRUE, BOX_PADDING); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), hbox_cs, TRUE, TRUE, BOX_PADDING); g_signal_connect (button_use_image, "clicked", G_CALLBACK (choose_image), cds); gtk_widget_show_all (hbox_cs); gtk_widget_show_all (hbox_swatch); gint resp = gtk_dialog_run (GTK_DIALOG (dialog)); if (resp == GTK_RESPONSE_ACCEPT) { for (i = 0; i < 6; ++i) { /* Iterate over all the views and set the new properties */ GSList *v; for (v = game->views; v != NULL; v = g_slist_next (v)) { gchar faceprop[10]; GdkColor *c = NULL; GdkPixbuf *pixbuf = NULL; GbkSwatch *s = GBK_SWATCH (cds->swatches[i]); enum surface surface; g_object_get (s, "color", &c, NULL); snprintf (faceprop, 10, "color%d", i); g_object_set (v->data, faceprop, c, NULL); g_object_get (s, "texture", &pixbuf, NULL); snprintf (faceprop, 10, "image%d", i); g_object_set (v->data, faceprop, pixbuf, NULL); g_object_get (s, "surface", &surface, NULL); snprintf (faceprop, 10, "surface%d", i); g_object_set (v->data, faceprop, surface, NULL); } } gtk_widget_queue_draw (GTK_WIDGET (game->toplevel)); } gtk_widget_destroy (dialog); g_free (cds); } gnubik-2.4.3/src/drwBlock.h0000644000175000017460000000177513070435673012456 00000000000000/* routines which actually draw the blocks of the cube. Copyright (C) 1998, 2011 John Darrington This program 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 3 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, see . */ #ifndef DRW_BLOCKS_H #define DRW_BLOCKS_H #include #include #include "cube.h" #include "cubeview.h" /* The texture names for each face */ void drawCube (GbkCube * cube, GLboolean ancilliary, GbkCubeview * cv); #endif gnubik-2.4.3/src/textures.c0000644000175000017460000000522613070435673012560 00000000000000/* Texture mapping functions for the Cube Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #include #include #include #include #include #include "textures.h" #include #define _(String) gettext (String) #define N_(String) (String) /* Create a texture from a gdk_pixbuf. Returns NULL if it cannot be created. */ GLuint create_pattern_from_pixbuf (const GdkPixbuf * pixbuf, GError ** gerr) { GLuint texName; glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glGenTextures (1, &texName); glBindTexture (GL_TEXTURE_2D, texName); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); { guchar *pixels; GLenum format; GQuark domain = g_quark_from_string ("gnubik-texture"); int width = gdk_pixbuf_get_width (pixbuf); int height = gdk_pixbuf_get_height (pixbuf); GdkColorspace colourSpace = gdk_pixbuf_get_colorspace (pixbuf); int channels = gdk_pixbuf_get_n_channels (pixbuf); gboolean has_alpha = gdk_pixbuf_get_has_alpha (pixbuf); /* This seems to cover all the cases that gdk_pixbuf supports at the moment */ switch (colourSpace) { case GDK_COLORSPACE_RGB: if (channels == 4 && has_alpha) { format = GL_RGBA; } else if (channels == 3 && !has_alpha) { format = GL_RGB; } else { if (gerr) { *gerr = g_error_new (domain, 0, _ ("Pixbuf has wrong number of channels")); } return 0; } break; default: if (gerr) { *gerr = g_error_new (domain, 1, _("Pixbuf has unknown colorspace: %d"), colourSpace); } return 0; } pixels = gdk_pixbuf_get_pixels (pixbuf); glTexImage2D (GL_TEXTURE_2D, 0, 3, width, height, 0, format, GL_UNSIGNED_BYTE, pixels); } return texName; } gnubik-2.4.3/src/dialogs.h0000644000175000017460000000176513070435673012330 00000000000000/* Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #ifndef DIALOGS_H #define DIALOGS_H #include #include "cube.h" #include "game.h" struct preferences_state; void request_new_game (GtkAction * act, struct preferences_state *ps); void about_dialog (GtkWidget * w, GtkWindow *); void new_game_dialog (GtkWidget * w, GbkGame * game); #endif gnubik-2.4.3/src/txfm.c0000644000175000017460000000663713070435673011662 00000000000000/* A little library to do matrix arithmetic Copyright (C) 1998, 2011 John Darrington This program 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 3 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, see . */ #include #include #include #include "txfm.h" #include /* print out the location of a point. For debug only */ void point_dump (const point p) { int i; for (i = 0; i < MATRIX_DIM; i++) { printf ("%f\t", p[i]); } putchar ('\n'); } /* Pre-multiply a point or vector x, by matrix M */ void vector_transform_in_place (pv x, const Matrix M) { int i, j; /* Temporary point variable for result */ pv q = { 0, 0, 0, 0 }; /* for each column */ for (j = 0; j < MATRIX_DIM; ++j) { /* for each row */ for (i = 0; i < MATRIX_DIM; ++i) q[i] += M[i + MATRIX_DIM * j] * x[j]; } /* Now copy q into x */ for (i = 0; i < MATRIX_DIM; i++) x[i] = q[i]; } /* Pre-multiply a point or vector x, by matrix M, placing the result into q */ void vector_transform (pv q, const pv x, const Matrix M) { int i, j; memset (q, 0, sizeof (*q) * MATRIX_DIM); /* for each column */ for (j = 0; j < MATRIX_DIM; ++j) { /* for each row */ for (i = 0; i < MATRIX_DIM; ++i) q[i] += M[i + MATRIX_DIM * j] * x[j]; } } /* print a matrix on the stdout. For debugging */ void matrix_dump (const Matrix M) { int i, j; /* for each row */ for (i = 0; i < MATRIX_DIM; i++) { /* for each column */ for (j = 0; j < MATRIX_DIM; j++) { printf ("%f\t", (float) M[i + (MATRIX_DIM * j)]); } putchar ('\n'); } } /* Pre-multiply a matrix N, by matrix M */ void matrix_pre_mult (Matrix N, const Matrix M) { int i, j; int k; /* Temporary Matrix variable for result */ Matrix T = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; for (k = 0; k < MATRIX_DIM; k++) { for (i = 0; i < MATRIX_DIM; i++) { for (j = 0; j < MATRIX_DIM; j++) { T[i + k * MATRIX_DIM] += M[i + MATRIX_DIM * j] * N[j + MATRIX_DIM * k]; } } } /* Now copy T into N */ for (i = 0; i < MATRIX_DIM * MATRIX_DIM; i++) N[i] = T[i]; } /* Set matrix element x, y to value */ void matrix_set (Matrix M, int x, int y, float value) { assert (x <= MATRIX_DIM); assert (y <= MATRIX_DIM); M[x + MATRIX_DIM * y] = value; } /* Create a vector by taking the difference of 2 points */ void vector_from_points (vector v, const point p1, const point p2) { int i; for (i = 0; i < MATRIX_DIM; ++i) v[i] = p2[i] - p1[i]; assert (v[MATRIX_DIM - 1] == 0.0); } /* Return zero if any corresponding components of the two vectors are not equal, otherwise return one to indicate the vectors are identical. */ bool vectors_equal (const vector v1, const vector v2) { int i; for (i = 0; i < 4; ++i) if (v1[i] != v2[i]) return 0; return 1; } gnubik-2.4.3/src/glarea.h0000644000175000017460000000173513070435673012136 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #ifndef GLAREA_H #define GLAREA_H #include "cubeview.h" extern bool have_clip_volume_hint ; void perspectiveSet (struct scene_view *); void scene_init (GbkCubeview *); void projection_init (struct scene_view *, int jitter); #endif gnubik-2.4.3/src/move.h0000644000175000017460000000373413070435673011652 00000000000000/* Copyright (c) 2011 John Darrington This program 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 3 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, see . */ #ifndef MOVE_H #define MOVE_H #include #include /* Structure used to communicate which blocks of the cube lie in a certain slice. These objects should only be constructed by one of the identify_blocks functions, and must be destroyed with the free_slice_blocks function. */ typedef struct _Slice_Blocks { int *blocks; int number_blocks; int ref; } Slice_Blocks; /* A structure containing information about a movement taking place. */ struct move_data; #define MD_OPAQUE 0 #if !MD_OPAQUE /* A structure containing information about a movement taking place. */ struct move_data { int slice; short dir; /* 0 = cw, 1 = ccw */ short axis; /* [0,2] */ short turns; /* Normally 1 or 2 */ Slice_Blocks *blocks_in_motion; int ref; }; #endif GType move_get_type (void); struct move_data *move_create (int slice, short axis, short dir); void move_unref (const struct move_data *); const struct move_data *move_ref (const struct move_data *) __attribute__ ((warn_unused_result)); struct move_data *move_copy (const struct move_data *); short move_turns (const struct move_data *); short move_dir (const struct move_data *); short move_axis (const struct move_data *); void move_set_turns (struct move_data *, int); void move_dump (const struct move_data *m); #endif gnubik-2.4.3/src/guile-hooks.c0000644000175000017460000001373013070435673013122 00000000000000/* Copyright (C) 2004, 2011 Dale Mellor This program 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 3 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, see . */ #include #include "guile-hooks.h" #include #include #include #include "cube.h" #include "menus.h" #include #if SCM_MAJOR_VERSION < 2 #define scm_to_utf8_string(name) scm_to_locale_string(name) #endif /* This function is called from the menu when the user makes a selection. The data is a string which was registered with the menu system and gives the name of a scheme procedure to execute. */ static void run_scheme (GtkAction * act, SCM exp) { scm_eval (exp, scm_interaction_environment ()); } /* The menu manager */ static GtkUIManager *uim; static SCM gnubik_create_menu (SCM name, SCM loc) { char *ml = scm_to_utf8_string (name); char *loc_str = NULL; GtkActionGroup *ag = gtk_action_group_new (ml); GtkActionEntry gae; if (SCM_UNBNDP (loc)) loc_str = g_strdup ("/ui/MainMenu/scripts-menu"); else loc_str = scm_to_locale_string (loc); gae.name = ml; gae.stock_id = NULL; gae.label = ml; gae.accelerator = NULL; gae.tooltip = NULL; gae.callback = NULL; gtk_action_group_add_actions (ag, &gae, 1, NULL); gtk_ui_manager_insert_action_group (uim, ag, 0); gtk_ui_manager_add_ui (uim, gtk_ui_manager_new_merge_id (uim), loc_str, ml, ml, GTK_UI_MANAGER_MENU, TRUE); char *menuloc = g_strdup_printf ("%s/%s", loc_str, ml); SCM sml = scm_from_locale_string (menuloc); free (ml); free (menuloc); free (loc_str); return sml; } /* Function callable from scheme (as gnubik-register-script) which allows a script to specify a menu entry and the name of a procedure to call when that menu entry is selected. Note that /Scripts/ is always appended, so all scripts are forced under the Scripts main menu item. */ static SCM gnubik_register_script (SCM menu_location, SCM callback, SCM loc) { char *ml = scm_to_utf8_string (menu_location); char *loc_str = scm_to_locale_string (loc); GtkActionGroup *ag = gtk_action_group_new (ml); GtkActionEntry gae; gae.name = ml; gae.stock_id = NULL; gae.label = ml; gae.accelerator = NULL; gae.tooltip = NULL; gae.callback = G_CALLBACK (run_scheme); scm_permanent_object (callback); gtk_action_group_add_actions (ag, &gae, 1, callback); gtk_ui_manager_insert_action_group (uim, ag, 0); gtk_ui_manager_add_ui (uim, gtk_ui_manager_new_merge_id (uim), loc_str, ml, ml, GTK_UI_MANAGER_MENUITEM, TRUE); free (loc_str); free (ml); return SCM_UNSPECIFIED; } extern GbkGame *the_game; /* Function callable from scheme as gnubik-cube-state which returns a structure reflecting the current state of the cube. */ static SCM gnubik_cube_state () { return make_scm_cube (the_game->cube); } /* Function which, when called from scheme as gnubik-append-moves, appends moves to the queue and then runs the queue. */ static SCM gnubik_append_moves (SCM list) { if (!gbk_game_at_end (the_game)) gbk_game_delete_moves (the_game, the_game->iter->next); for (; !scm_is_null (list); list = SCM_CDR (list)) { struct move_data *move = move_create (scm_to_int (SCM_CADAR (list)), scm_to_int (SCM_CAAR (list)), scm_to_int (SCM_CADDAR (list))); gbk_game_insert_move (the_game, move, &the_game->end_of_moves); move_unref (move); } gbk_game_replay (the_game); return SCM_UNSPECIFIED; } /* Function to allow a guile script to display a message to the user. */ static SCM gnubik_error_dialog (SCM message) { char *msg = scm_to_utf8_string (message); error_dialog (the_game->toplevel, msg); free (msg); return SCM_UNSPECIFIED; } /* Function to scan the named directory for all files with a .scm extension, and execute the contents of each file. */ static void read_script_directory (const char *dir_name) { static char buffer[1024]; DIR *directory = opendir (dir_name); if (directory) { struct dirent *entry; for (entry = readdir (directory); entry; entry = readdir (directory)) if (strcmp (".scm", entry->d_name + strlen (entry->d_name) - 4) == 0) { snprintf (buffer, 1024, "%s/%s", dir_name, entry->d_name); scm_primitive_load (scm_from_locale_string (buffer)); } } closedir (directory); } /* This function initializes the scheme world for us, and once the scripts have all been run, it returns the requested menu structure to the caller. Before running the scripts, however, it first makes sure all the pertinent C functions are registered in the guile world. */ void startup_guile_scripts (GtkUIManager * ui_manager) { /* Register C functions that the scheme world can access. */ scm_c_define_gsubr ("gnubik-create-menu", 1, 1, 0, gnubik_create_menu); scm_c_define_gsubr ("gnubik-register-script", 3, 0, 0, gnubik_register_script); scm_c_define_gsubr ("gnubik-cube-state", 0, 0, 0, gnubik_cube_state); scm_c_define_gsubr ("gnubik-append-moves", 1, 0, 0, gnubik_append_moves); scm_c_define_gsubr ("gnubik-error-dialog", 1, 0, 0, gnubik_error_dialog); uim = ui_manager; /* Run all the initialization files in .../share/gnubik/guile, and the system scripts in .../share/gnubik/scripts. */ read_script_directory (GUILEDIR); read_script_directory (SCRIPTDIR); { gchar *cfd = g_strdup_printf ("%s/gnubik", g_get_user_config_dir ()); read_script_directory (cfd); g_free (cfd); } } gnubik-2.4.3/src/automake.mk0000644000175000017460000000214713070435673012667 00000000000000bin_PROGRAMS = src/gnubik AM_CPPFLAGS+=-DGUILEDIR=\"$(pkgdatadir)\" \ -DSCRIPTDIR=\"$(pkgdatadir)/scripts\" src_gnubik_CPPFLAGS = $(AM_CPPFLAGS) src_gnubik_CFLAGS = $(AM_CFLAGS) \ $(GTK_CFLAGS) \ $(GL_CFLAGS) \ $(GLU_CFLAGS) \ $(GLUT_CFLAGS) \ $(GDK_GL_EXT_CFLAGS) \ $(GTK_GL_EXT_CFLAGS) \ $(GUILE_CFLAGS) \ -DGDK_MULTIHEAD_SAFE=1 \ -DGSEAL_ENABLE=1 src_gnubik_LDADD = $(GTK_LIBS) $(GDK_GL_EXT_LIBS) $(GTK_GL_EXT_LIBS) \ $(GL_LIBS) \ $(GLU_LIBS) \ $(GLUT_LIBS) \ $(GUILE_LIBS) src_gnubik_SOURCES = \ src/cube.c src/cube.h \ src/cube_i.h \ src/cubeview.c src/cubeview.h \ src/colour-dialog.c src/colour-dialog.h \ src/control.h src/control.c \ src/cursors.c src/cursors.h \ src/dialogs.c src/dialogs.h \ src/drwBlock.c src/drwBlock.h \ src/game.c src/game.h \ src/glarea-common.c \ src/glarea.h \ src/guile-hooks.c src/guile-hooks.h \ src/main.c \ src/menus.c src/menus.h \ src/move.c src/move.h \ src/quarternion.c src/quarternion.h \ src/select.c src/select.h \ src/swatch.c src/swatch.h \ src/txfm.c src/txfm.h \ src/textures.c src/textures.h \ src/version.c src/version.h gnubik-2.4.3/src/cube.h0000644000175000017460000000716613070435673011625 00000000000000/* Copyright (c) 2004 Dale Mellor, John Darrington 1998, 2003, 2009, 2011 John Darrington This program 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 3 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, see . */ #ifndef __GBK_CUBE_H__ #define __GBK_CUBE_H__ #include "move.h" #include "quarternion.h" /* Is the cube solved? */ enum cube_status { NOT_SOLVED = 0, SOLVED, HALF_SOLVED }; /* Unique identifiers for the faces, which can be used to populate a bit-field. */ enum { FACE_0 = 0x01 << 0, FACE_1 = 0x01 << 1, FACE_2 = 0x01 << 2, FACE_3 = 0x01 << 3, FACE_4 = 0x01 << 4, FACE_5 = 0x01 << 5 }; #include #include "cube_i.h" #define GBK_TYPE_CUBE (gbk_cube_get_type ()) #define GBK_CUBE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GBK_TYPE_CUBE, GbkCube)) #define GBK_IS_CUBE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GBK_TYPE_CUBE)) #define GBK_CUBE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GBK_TYPE_CUBE, GbkCubeClass)) #define GBK_IS_CUBE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GBK_TYPE_CUBE)) #define GBK_CUBE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GBK_TYPE_CUBE, GbkCubeClass)) typedef struct _GbkCube GbkCube; typedef struct _GbkCubeClass GbkCubeClass; struct _GbkCube { GObject parent_instance; /* instance members */ /* The number of blocks on each side of the cube */ int size[3]; /* cube_size ** 3 */ int number_blocks; /* A set of attributes for every block (including internal ones!) */ Block *blocks; Quarternion orientation; }; struct _GbkCubeClass { GObjectClass parent_class; /* class members */ }; /* used by GBK_TYPE_CUBE */ GType gbk_cube_get_type (void); /* * Method definitions. */ /* Get a copy of the tranformation of the specified block. The return value is zero on success, one otherwise. */ int gbk_cube_get_block_transform (const GbkCube * cube, int block, Matrix transform); int gbk_cube_get_size (const GbkCube * cube, int dim); void gbk_cube_scramble (GbkCube * cube); int gbk_cube_get_number_of_blocks (const GbkCube * cube); void gbk_cube_rotate_slice (GbkCube * cube, const struct move_data *md); gboolean gbk_cube_square_axis (const GbkCube * cube, int axis); /* Create a new cube object with the given number of faces per side. */ GObject *gbk_cube_new (int, int, int); void gbk_cube_set_quadrant_vector (GbkCube * cube, int block, int face, int quadrant, const vector v); void gbk_cube_get_quadrant_vector (const GbkCube * cube, int block, int face, int quadrant, vector v); enum cube_status gbk_cube_get_status (const GbkCube * cube); /* Free the resources associated with an instance of the above structure. */ void free_slice_blocks (Slice_Blocks * slice_blocks); unsigned int gbk_cube_get_visible_faces (const GbkCube * cube, int block_id); void gbk_cube_set_size (GbkCube * ret, int s0, int s1, int s2); void gbk_cube_rotate (GbkCube * cube, const vector v, gfloat step); #include SCM make_scm_cube (const GbkCube * cube); #endif /* __CUBE_H__ */ gnubik-2.4.3/src/cube.c0000644000175000017460000004541113070435673011613 00000000000000/* Copyright (c) 2009 John Darrington Copyright (c) 2004 Dale Mellor, John Darrington copyright (c) 1998, 2003, 2011 John Darrington This program 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 3 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, see . */ #include #include "cube.h" #include #include #include #include static inline int cos_quadrant (int quarters); static inline int sin_quadrant (int quarters); static int block_coords_to_index (const GbkCube * cube, int x, int dim); /* Manufacture a SCM object which is a vector of six vectors of (cube_size * cube_size) elements, each one holding the colour of a patch of the surface of the cube (a number from [0, 5]). */ SCM make_scm_cube (const GbkCube * cube) { Block *block; /* We can manufacture our scheme object. */ SCM scm_face_vector = scm_c_make_vector (6, SCM_UNSPECIFIED); int biggest = 0; int i; for (i = 0; i < 3; ++i) { if (biggest < gbk_cube_get_size (cube, i)) { biggest = gbk_cube_get_size (cube, i); } } int colours[6][biggest][biggest]; memset (colours, -1, 6 * biggest * biggest); /* Loop over all blocks and faces, but only process if the face is on the outside of the cube. */ for (block = cube->blocks + cube->number_blocks - 1; block >= cube->blocks; --block) { int face; for (face = 0; face < 6; ++face) { if (!(block->visible_faces & (0x01 << face))) continue; /* Apply the rotation part of the block transformation to the offset of the face centre from the centre of the block. This will tell us the direction the face is now facing. */ point face_direction; vector_transform (face_direction, block->face[face].normal, block->transformation); /* The face direction will have exactly one non-zero component; this is in the direction of the normal, so we can infer which side of the cube we are on. Further, if we look at the other two components of the location part of the block transformation, we can infer the position of the block in the face. We set the appropriate element in the colours array to the colour of this face, which corresponds exactly with the original face the block was at. */ if (abs (face_direction[0]) > 0.1) colours[face_direction[0] < 0.0 ? 4 : 5] [block_coords_to_index (cube, block->transformation[13], 1)] [block_coords_to_index (cube, block->transformation[14], 2)] = face; else if (abs (face_direction[1]) > 0.1) colours[face_direction[1] < 0.0 ? 2 : 3] [block_coords_to_index (cube, block->transformation[12], 0)] [block_coords_to_index (cube, block->transformation[14], 2)] = face; else colours[face_direction[2] < 0.0 ? 0 : 1] [block_coords_to_index (cube, block->transformation[12], 0)] [block_coords_to_index (cube, block->transformation[13], 1)] = face; } } int face; for (face = 0; face < 6; ++face) { int dimA, dimB; { switch (face) { case 0: case 1: dimA = 0; dimB = 1; break; case 2: case 3: dimA = 0; dimB = 2; break; case 4: case 5: dimA = 1; dimB = 2; break; } } int i, j; SCM scm_block_vector = scm_c_make_vector (gbk_cube_get_size (cube, dimA) * gbk_cube_get_size (cube, dimB), SCM_UNSPECIFIED); for (i = 0; i < gbk_cube_get_size (cube, dimA); ++i) for (j = 0; j < gbk_cube_get_size (cube, dimB); ++j) scm_vector_set_x (scm_block_vector, scm_from_int (i + gbk_cube_get_size (cube, dimA) * j), scm_from_int (colours[face][i][j])); scm_vector_set_x (scm_face_vector, scm_from_int (face), scm_block_vector); } return scm_cons (scm_list_5 (scm_from_int (1), scm_from_int (3), scm_from_int (gbk_cube_get_size (cube, 0)), scm_from_int (gbk_cube_get_size (cube, 1)), scm_from_int (gbk_cube_get_size (cube, 2))), scm_face_vector); } /* Set the normal of the face to (x0, x1, x2). */ static inline void set_face_normal (Block * block, int face, GLfloat x0, GLfloat x1, GLfloat x2) { point *normal = &block->face[face].normal; (*normal)[0] = x0; (*normal)[1] = x1; (*normal)[2] = x2; (*normal)[3] = 0; } /* Set the normal of the face to (x0, x1, x2). */ static inline void set_face_up (Block * block, int face, GLfloat x0, GLfloat x1, GLfloat x2) { point *up = &block->face[face].up; (*up)[0] = x0; (*up)[1] = x1; (*up)[2] = x2; (*up)[3] = 0; } /* During the construction of the array of blocks, we start by assigning them coordinates with components (0, 1, 2, ...), and then transform them to the range (-(cube_size-1), -(cube_size-2), ..., 0, 1, 2, ..., cube_size-1); this function performs the transformation. Later on we will also be needing the inverse transformation. */ static inline int block_index_to_coords (const GbkCube * cube, int i, int dim) { return 2 * i - (cube->size[dim] - 1); } /* The inverse of the above */ static int block_coords_to_index (const GbkCube * cube, int x, int dim) { return (x + cube->size[dim] - 1) / 2; } static void gbk_cube_init (GbkCube * ret) { ret->blocks = NULL; quarternion_set_to_unit (&ret->orientation); } void gbk_cube_set_size (GbkCube * cube, int s0, int s1, int s2) { gint s[3]; s[0] = s0; s[1] = s1; s[2] = s2; g_object_set (cube, "dimensions", s, NULL); } static void cube_set_size (GbkCube * ret, int s0, int s1, int s2) { int i; ret->size[0] = s0; ret->size[1] = s1; ret->size[2] = s2; ret->number_blocks = ret->size[0] * ret->size[1] * ret->size[2]; g_free (ret->blocks); if (NULL == (ret->blocks = g_malloc (ret->number_blocks * sizeof (Block)))) { g_error ("Error allocating blocks"); return; } /* Loop over the array of blocks, and initialize each one. */ for (i = 0; i < ret->number_blocks; ++i) { int k; Block *block = ret->blocks + i; /* Flagging only certain faces as visible allows us to avoid rendering invisible surfaces, thus slowing down animation. */ block->visible_faces = (FACE_0 * (0 == i / (gbk_cube_get_size (ret, 0) * gbk_cube_get_size (ret, 1)))) | (FACE_1 * (gbk_cube_get_size (ret, 2) - 1 == i / (gbk_cube_get_size (ret, 0) * gbk_cube_get_size (ret, 1)))) | (FACE_2 * (0 == i / gbk_cube_get_size (ret, 0) % gbk_cube_get_size (ret, 1))) | (FACE_3 * (gbk_cube_get_size (ret, 1) - 1 == i / gbk_cube_get_size (ret, 0) % gbk_cube_get_size (ret, 1))) | FACE_4 * (0 == i % gbk_cube_get_size (ret, 0)) | FACE_5 * (gbk_cube_get_size (ret, 0) - 1 == i % gbk_cube_get_size (ret, 0)); /* Initialize all transformations to the identity matrix, then set the translation part to correspond to the initial position of the block. */ for (k = 0; k < 12; ++k) block->transformation[k] = 0; for (k = 0; k < 4; ++k) block->transformation[5 * k] = 1; block->transformation[12] = block_index_to_coords (ret, i % ret->size[0], 0); block->transformation[13] = block_index_to_coords (ret, (i / ret->size[0]) % ret->size[1], 1); block->transformation[14] = block_index_to_coords (ret, (i / (ret->size[0] * ret->size[1])) % ret->size[2], 2); /* Set all the face normals. */ set_face_normal (block, 0, 0, 0, -1); set_face_normal (block, 1, 0, 0, 1); set_face_normal (block, 2, 0, -1, 0); set_face_normal (block, 3, 0, 1, 0); set_face_normal (block, 4, -1, 0, 0); set_face_normal (block, 5, 1, 0, 0); set_face_up (block, 0, 1, 0, 0); set_face_up (block, 1, 1, 0, 0); set_face_up (block, 2, 1, 0, 0); set_face_up (block, 3, 1, 0, 0); set_face_up (block, 4, 0, 1, 0); set_face_up (block, 5, 0, 1, 0); } /* End of loop over blocks. */ } enum { PROP_0 = 0, PROP_DIMENSIONS }; static void cube_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GbkCube *cube = GBK_CUBE (object); switch (prop_id) { case PROP_DIMENSIONS: { gint *s = g_value_get_pointer (value); cube_set_size (cube, s[0], s[1], s[2]); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }; } static void cube_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GbkCube *cube = GBK_CUBE (object); switch (prop_id) { case PROP_DIMENSIONS: g_value_set_pointer (value, cube->size); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }; } enum { MOVED, ROTATED, n_SIGNALS }; static guint signals[n_SIGNALS]; static void gbk_cube_class_init (GbkCubeClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GParamSpec *gbk_param_spec; gobject_class->set_property = cube_set_property; gobject_class->get_property = cube_get_property; gbk_param_spec = g_param_spec_pointer ("dimensions", "Dimensions", "An array of 3 ints specifying how many cubelets along each side of the cube", G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_DIMENSIONS, gbk_param_spec); signals[MOVED] = g_signal_new ("move", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOXED, G_TYPE_NONE, 1, move_get_type ()); signals[ROTATED] = g_signal_new ("rotate", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_FIRST, 0, NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } G_DEFINE_TYPE (GbkCube, gbk_cube, G_TYPE_OBJECT); int gbk_cube_get_size (const GbkCube * cube, int dim) { gint *s; g_assert (dim >= 0); g_assert (dim < 3); g_object_get ((GbkCube *) cube, "dimensions", &s, NULL); return s[dim]; } void gbk_cube_scramble (GbkCube * cube) { int i; for (i = 0; i < 2 * gbk_cube_get_number_of_blocks (cube); i++) { struct move_data *move; const short axis = rand () % 3; int slice; const int size = gbk_cube_get_size (cube, axis); slice = rand () % size; slice *= 2; slice -= size - 1; move = move_create (slice, axis, 0); gbk_cube_rotate_slice (cube, move); move_unref (move); } } int gbk_cube_get_number_of_blocks (const GbkCube * cube) { return cube->number_blocks; } /* Get the transformation of block number `block_id' from the origin, and store it in transform. Return 0 on success, 1 on error. */ int gbk_cube_get_block_transform (const GbkCube * cube, int block_id, Matrix transform) { memcpy (transform, cube->blocks[block_id].transformation, sizeof (Matrix)); return 0; } GObject * gbk_cube_new (int x, int y, int z) { gint s[3]; s[0] = x; s[1] = y; s[2] = z; return g_object_new (gbk_cube_get_type (), "dimensions", s, NULL); } /* Utility function to fetch a particular face of the cube. */ static inline Face * gbk_cube_get_face (GbkCube * cube, int block, int face) { return cube->blocks[block].face + face; } /* Set the vector for block/face/quadrant to v. */ void gbk_cube_set_quadrant_vector (GbkCube * cube, int block, int face, int quadrant, const vector v) { Matrix view; vector *dest = gbk_cube_get_face (cube, block, face)->quadrants + quadrant; glGetFloatv (GL_MODELVIEW_MATRIX, view); vector_transform (*dest, v, view); } static Slice_Blocks *cube_identify_blocks_2 (const GbkCube * cube, GLfloat slice_depth, int axis); /* Rotate the CUBE according to move M */ void gbk_cube_rotate_slice (GbkCube * cube, const struct move_data *m) { struct move_data *md = move_copy (m); int turns; /* Iterator for array of blocks in the current slice. */ const int *i; /* Create a matrix describing the rotation of we are about to perform. We do this by starting with the identity matrix... */ Matrix rotation = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 }; /* If rotating about a non-square axis, then only 180 deg turns are permitted */ if (!gbk_cube_square_axis (cube, move_axis (md))) { move_set_turns (md, 2); } /* Rotating backward 90 deg is the same as forward by 270 deg */ turns = move_turns (md); if (move_dir (md) == 0 && move_turns (md) == 1) { turns = 3; } /* ... and then assigning values to the active elements. */ rotation[(move_axis (md) + 1) % 3 + 4 * ((move_axis (md) + 1) % 3)] = cos_quadrant (turns); rotation[(move_axis (md) + 2) % 3 + 4 * ((move_axis (md) + 2) % 3)] = cos_quadrant (turns); rotation[(move_axis (md) + 1) % 3 + 4 * ((move_axis (md) + 2) % 3)] = sin_quadrant (turns); rotation[(move_axis (md) + 2) % 3 + 4 * ((move_axis (md) + 1) % 3)] = -sin_quadrant (turns); if (NULL == md->blocks_in_motion) ((struct move_data *) md)->blocks_in_motion = cube_identify_blocks_2 (cube, md->slice, move_axis (md)); g_assert (md->blocks_in_motion); /* Apply the rotation matrix to all the blocks in this slice. We iterate backwards to avoid recalculating the end of the loop with every iteration. */ for (i = md->blocks_in_motion->blocks + md->blocks_in_motion->number_blocks - 1; i >= md->blocks_in_motion->blocks; --i) matrix_pre_mult (cube->blocks[*i].transformation, rotation); g_signal_emit (cube, signals[MOVED], 0, md); move_unref (md); } /* End of function rotate_slice (). */ /* Return true iff the section orthogonal to the axis is square. */ gboolean gbk_cube_square_axis (const GbkCube * cube, int axis) { int other_axis_size = -1; int j; for (j = 0; j < 3; ++j) { if (j == axis) continue; if (other_axis_size != -1 && other_axis_size != gbk_cube_get_size (cube, j)) return FALSE; other_axis_size = gbk_cube_get_size (cube, j); } return TRUE; } /* Return the quadrant vector in v. */ void gbk_cube_get_quadrant_vector (const GbkCube * cube, int block, int face, int quadrant, vector v) { memcpy (v, gbk_cube_get_face ((GbkCube *) cube, block, face)->quadrants + quadrant, sizeof (vector)); } /* Quick cosine function for angles expressed in quarters of complete revolutions. */ static inline int cos_quadrant (int quarters) { switch (abs (quarters) % 4) { case 0: return 1; case 2: return -1; default: return 0; } } /* Quick sine function, for angles expressed in quarters of complete revolutions. */ static inline int sin_quadrant (int quarters) { return cos_quadrant (quarters - 1); } /* Return a pointer to an array of block numbers which are in the slice identified by slice_depth (two publicly-exposed wrappers defined below allow for a convenient means of computing this), and axis (an integer in [0, 3)). The return value should eventually be destroyed with free_slice_blocks (). */ static Slice_Blocks * cube_identify_blocks_2 (const GbkCube * cube, GLfloat slice_depth, int axis) { /* Looping variables. */ int dim, j = 0; Block *i; /* Allocate memory for the return object. */ Slice_Blocks *ret = g_malloc (sizeof *ret); ret->ref = 1; ret->number_blocks = 1; for (dim = 0; dim < 3; ++dim) { if (dim != axis) ret->number_blocks *= cube->size[dim]; } ret->blocks = g_malloc (ret->number_blocks * sizeof (int)); if (!ret->blocks) { g_free (ret); return NULL; } /* Iterate over all the blocks in the cube. When we find one whose axis-component of the location part of its transformation matrix corresponds to the requested slice depth, then we make a note of its offset in the return->blocks array. */ for (i = cube->blocks + cube->number_blocks - 1; i >= cube->blocks; --i) { if (fabs (i->transformation[12 + axis] - slice_depth) < 0.1) { ret->blocks[j++] = i - cube->blocks; } } return ret; } /* The cube is solved iff for all faces the quadrant vectors point in the same direction. If however all the normals point in the same direction, but the quadrants do not, then the colours are all on the right faces, but not correctly orientated. */ enum cube_status gbk_cube_get_status (const GbkCube * cube) { /* Loop variables for iterating over faces and blocks. */ int face; Block *block; gboolean directions_uniform = TRUE; /* Find out if the cube is at least half solved (the colours are right, but some orientations are wrong (this can be seen on a face away from an edge of the cube with a pixmap on it). If the cube is not at least half-solved, then it is definitely unsolved and this value is returned. */ for (face = 0; face < 6; ++face) { vector q_n; vector q_u; const unsigned int mask = 0x01 << face; int x = 0; for (block = cube->blocks + cube->number_blocks - 1; block >= cube->blocks; --block) { if (block->visible_faces & mask) { vector v_n; vector v_u; if (x == 0) { vector_transform (q_n, block->face[face].normal, block->transformation); if (directions_uniform) vector_transform (q_u, block->face[face].up, block->transformation); ++x; } else { vector_transform (v_n, block->face[face].normal, block->transformation); if (directions_uniform) vector_transform (v_u, block->face[face].up, block->transformation); if (!vectors_equal (q_n, v_n)) return NOT_SOLVED; if (directions_uniform && !vectors_equal (q_u, v_u)) directions_uniform = FALSE; } } } } /* struct cube is fully solved. */ return directions_uniform ? SOLVED : HALF_SOLVED; } /* Return an int identifying all the visible faces in this block. */ unsigned int gbk_cube_get_visible_faces (const GbkCube * cube, int block_id) { return cube->blocks[block_id].visible_faces; } void gbk_cube_rotate (GbkCube * cube, const vector v, gfloat step) { Quarternion rot; quarternion_from_rotation (&rot, v, step); quarternion_pre_mult (&cube->orientation, &rot); g_signal_emit (cube, signals[ROTATED], 0); } gnubik-2.4.3/src/main.c0000644000175000017460000001320113070435673011611 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 1998, 2003, 2004, 2011 John Darrington This program 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 3 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, see . */ #include #include #include #include #include #include #include "menus.h" #include "cubeview.h" #include "glarea.h" #include "version.h" #include "dialogs.h" #include "game.h" #include #define _(String) gettext (String) #define N_(String) (String) static const char help_string[]; struct application_options { bool solved; int initial_cube_size[3]; int frameQty; }; static void parse_app_opts (int *argc, char **argv, struct application_options *opts); GbkGame *the_game; bool have_clip_volume_hint = false; static void c_main (void *closure, int argc, char *argv[]) { GbkCube *cube = NULL; GtkWidget *form; GtkWidget *hbox; GtkWidget *window; GtkWidget *menubar; GtkWidget *playbar; GtkWidget *cubeview; GtkWidget *statusbar; struct application_options opts = { false, {3, 3, 3}, 2 }; /* Internationalisation stuff */ bindtextdomain (PACKAGE, LOCALEDIR); bind_textdomain_codeset (PACKAGE, "UTF-8"); textdomain (PACKAGE); gtk_init (&argc, &argv); gtk_gl_init (&argc, &argv); #if DEBUG glutInit (); #endif /* Create the top level widget --- that is, the main window which everything goes in */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (window, "delete-event", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_icon_name (GTK_WINDOW (window), "gnubik"); gtk_window_set_title (GTK_WINDOW (window), _(PACKAGE_NAME)); /* process arguments specific to this program */ parse_app_opts (&argc, argv, &opts); form = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), form); /* create the cube */ cube = GBK_CUBE (gbk_cube_new (opts.initial_cube_size[0], opts.initial_cube_size[1], opts.initial_cube_size[2])); /* If a solved cube has not been requested, then do some random moves on it */ if (!opts.solved) gbk_cube_scramble (cube); the_game = GBK_GAME (gbk_game_new (cube)); the_game->toplevel = GTK_WINDOW (window); menubar = create_menubar (the_game); gtk_box_pack_start (GTK_BOX (form), menubar, FALSE, TRUE, 0); playbar = create_play_toolbar (the_game); gtk_box_pack_start (GTK_BOX (form), playbar, FALSE, TRUE, 0); hbox = gtk_hbox_new (TRUE, 0); gtk_box_pack_start (GTK_BOX (form), hbox, TRUE, TRUE, 0); cubeview = gbk_cubeview_new (cube); gbk_cubeview_set_frame_qty (GBK_CUBEVIEW (cubeview), opts.frameQty); gtk_box_pack_start (GTK_BOX (hbox), cubeview, TRUE, TRUE, 0); gbk_game_add_view (the_game, GBK_CUBEVIEW (cubeview), TRUE); statusbar = create_statusbar (the_game); gtk_box_pack_start (GTK_BOX (form), statusbar, FALSE, FALSE, 0); gtk_widget_show_all (window); { char *s; char *str = strdup ((char *) glGetString (GL_EXTENSIONS)); for (s = strtok(str, " "); (s = strtok (NULL, " ")); ) { if (strcmp (s, "GL_EXT_clip_volume_hint") == 0) have_clip_volume_hint = true; } free (str); } gtk_main (); } #include int main (int argc, char **argv) { scm_boot_guile (argc, argv, c_main, 0); return 0; } /* process the options we're interested in. X resource overrides should have already been extracted */ static void parse_app_opts (int *argc, char **argv, struct application_options *opts) { #ifdef HAVE_GETOPT_LONG #define GETOPT(A, B, C, D, E) getopt_long (A, B, C, D, E) #else #define GETOPT(A, B, C, D, E) getopt (A, B, C) #endif int c; const char shortopts[] = "vhsz:a:"; #ifdef HAVE_GETOPT_LONG int longind; const struct option longopts[] = { {"animation", 1, 0, 'a'}, {"help", 0, 0, 'h'}, {"version", 0, 0, 'v'}, {"solved", 0, 0, 's'}, {"size", 1, 0, 'z'}, {0, 0, 0, 0} }; #endif while ((c = GETOPT (*argc, argv, shortopts, longopts, &longind)) != -1) { int i; switch (c) { case 'a': { sscanf (optarg, "%d", &opts->frameQty); } break; case 's': opts->solved = 1; break; case 'z': opts->initial_cube_size[0] = atoi (strtok (optarg, ",")); if (opts->initial_cube_size[0] <= 0) opts->initial_cube_size[0] = 3; for (i = 1; i < 3; ++i) { char *x = strtok (NULL, ","); opts->initial_cube_size[i] = x ? atoi (x) : -1; if (opts->initial_cube_size[i] <= 0) opts->initial_cube_size[i] = opts->initial_cube_size[i - 1]; } break; case 'h': printf ("%s", help_string); exit (0); break; case 'v': printf ("%s\n", PACKAGE_VERSION); printf ("%s", copyleft_notice); exit (0); break; default: break; } } } static const char help_string[] = "-h\n--help\tShow this help message\n\n" "-v\n--version\tShow version number\n\n" "-s\n--solved\tStart with the cube already solved\n\n" "-z n,m,p\n--size=n\tShow a n x m x p sized cube \n\n" "-a n\n--animation=n\tNumber of intermediate positions to be shown in animations\n\n" "\n\nBug reports to " PACKAGE_BUGREPORT "\n"; gnubik-2.4.3/src/cubeview.h0000644000175000017460000000753713070435673012522 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 2003, 2004, 2009, 2011 John Darrington This program 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 3 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, see . */ #ifndef __GBK_CUBEVIEW_H__ #define __GBK_CUBEVIEW_H__ #include #include #include #include #include "cube.h" struct animation; enum surface { SURFACE_COLOURED, SURFACE_TILED, SURFACE_MOSAIC }; struct scene_view { GLdouble fovy; GLdouble cp_near; GLdouble cp_far; GLdouble bounding_sphere_radius; }; /* * Type macros. */ #define GBK_TYPE_CUBEVIEW (gbk_cubeview_get_type ()) #define GBK_CUBEVIEW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GBK_TYPE_CUBEVIEW, GbkCubeview)) #define GBK_IS_CUBEVIEW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GBK_TYPE_CUBEVIEW)) #define GBK_CUBEVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GBK_TYPE_CUBEVIEW, GbkCubeviewClass)) #define GBK_IS_CUBEVIEW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GBK_TYPE_CUBEVIEW)) #define GBK_CUBEVIEW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GBK_TYPE_CUBEVIEW, GbkCubeviewClass)) typedef struct _GbkCubeview GbkCubeview; typedef struct _GbkCubeviewClass GbkCubeviewClass; typedef void display (GbkCubeview *); struct _GbkCubeview { GtkDrawingArea parent_instance; GbkCube *cube; struct cublet_selection *cs; struct scene_view scene; /* instance members */ guint idle_id; guint rotate_id; guint move_id; guint dim_id; guint animation_timeout; GdkGLContext *glcontext; GdkGLDrawable *gldrawable; /* The move that will take place when the mouse is clicked */ struct move_data *pending_movement; /* Position of the mouse cursor */ gdouble last_mouse_x; gdouble last_mouse_y; /* Angle of the mouse cursor */ float cursor_angle; /* The current angle through which an animation has turned */ GLfloat animation_angle; /* the number of frames drawn when a slice of the cube rotates 90 degrees */ int frameQty; /* picture rate in ms. 40ms = 25 frames per sec */ int picture_rate; const struct move_data *current_move; Quarternion qView; GLfloat colour[6][3]; GdkPixbuf *pixbuf[6]; GLuint texName[6]; enum surface surface[6]; gboolean is_rotating; guint rot_timer; /* The cursor to use when nothing is selected */ GdkCursor *background_cursor ; }; struct _GbkCubeviewClass { GtkDrawingAreaClass parent_class; /* class members */ GdkGLContext *master_ctx; GdkGLConfig *glconfig; }; /* used by GBK_TYPE_CUBEVIEW */ GType gbk_cubeview_get_type (void); /* * Method definitions. */ GtkWidget *gbk_cubeview_new (GbkCube * c); /* Rotate the cube about the axis (screen relative) in direction dir */ void gbk_cubeview_redisplay (GbkCubeview * dc); void error_check (const char *file, int line_no, const char *string); #define ERR_CHECK(string) error_check (__FILE__,__LINE__,string) void gbk_cubeview_set_frame_qty (GbkCubeview * dc, int frames); gboolean gbk_cubeview_is_animating (GbkCubeview * dc); void gbk_cubeview_model_view_init (GbkCubeview * cv); void gbk_cubeview_rotate_cube (GbkCubeview * cv, int axis, int dir); GType gbk_cubeview_surface_get_type (void); #define GBK_TYPE_SURFACE (gbk_cubeview_surface_get_type ()) #endif /* __GBK_CUBEVIEW_H__ */ gnubik-2.4.3/src/control.c0000644000175000017460000001332213070435673012351 00000000000000/* Control functions for the Cube Copyright (C) 1998, 2003 John Darrington 2004 John Darrington, Dale Mellor 2011 John Darrington This program 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 3 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, see . */ #include #include "control.h" #include "select.h" #include "cursors.h" #include "cubeview.h" #include "txfm.h" #include /* return the turn direction, based upon the turn axis vector */ static int turnDir (GLfloat * vector) { /* This is a horrendous kludge. It works only because we know that vector is arithemtically very simple */ return (vector[0] + vector[1] + vector[2] > 0); } /* Convert a vector to a axis number. Obviously this assumes the vector is orthogonal to the frame of reference ( another nasty kludge ). */ static int vector2axis (GLfloat * vector) { return vector[0] != 0 ? 0 : vector[1] != 0 ? 1 : 2; } #define X {1, 0, 0, 0} #define _X {-1, 0, 0, 0} #define Y {0, 1, 0, 0} #define _Y {0, -1, 0, 0} #define Z {0, 0, 1, 0} #define _Z {0, 0, -1, 0} /* Determine the axis about which to rotate the slice, from the objects selected by the cursor position */ static void getTurnAxis (GbkCube * cube, const struct facet_selection *items, GLfloat * vector) { Matrix t; /* Each edge (quadrant) on a block represents a different axis */ const GLfloat axes[6][4][4] = { {_Y, X, Y, _X}, {Y, X, _Y, _X}, {Z, X, _Z, _X}, {_Z, X, Z, _X}, {_Y, _Z, Y, Z}, {Y, _Z, _Y, Z}, }; /* Fetch the selected block's transformation from its original orientation */ if (gbk_cube_get_block_transform (cube, items->block, t) != 0) { g_error ("Attempt to fetch non-existant block transform"); } /* Select the untransformed vector for the selected edge and transform it, so that we go the right way */ vector_transform (vector, axes[items->face][items->quadrant], t); } static void set_mouse_cursor (GtkWidget *w, const struct cublet_selection *cs) { GbkCubeview *cv = GBK_CUBEVIEW (w); GdkCursor *selected_cursor = cv->background_cursor; if (select_is_selected (cs)) { GdkDisplay *display = gtk_widget_get_display (w); GdkModifierType keymask; gdk_display_get_pointer (display, NULL, NULL, NULL, &keymask); int index; float angle = (int) cv->cursor_angle % 360; if (angle < 0) angle += 360.0; index = round (angle / cursor_interval); index = index % n_CURSORS; if ( keymask & GDK_SHIFT_MASK) index += n_CURSORS; if (NULL == cursor[index] ) { const unsigned char *mask_bits; const unsigned char *data_bits; int hot_x, hot_y; int width, height; GdkPixmap *source, *mask; GdkColor fg = { 0, 65535, 65535, 65535 }; /* White. */ GdkColor bg = { 0, 0, 0, 0 }; /* Black. */ get_cursor (index % n_CURSORS, &data_bits, &mask_bits, &height, &width, &hot_x, &hot_y, keymask & GDK_SHIFT_MASK); source = gdk_bitmap_create_from_data (NULL, (const gchar *) data_bits, width, height); mask = gdk_bitmap_create_from_data (NULL, (const gchar *) mask_bits, width, height); selected_cursor = gdk_cursor_new_from_pixmap (source, mask, &fg, &bg, hot_x, hot_y); g_object_unref (source); g_object_unref (mask); cursor[index] = selected_cursor; } else selected_cursor = cursor[index]; } gdk_window_set_cursor (gtk_widget_get_window (w), selected_cursor); } /* This func is called whenever a new set of polygons have been selected. */ void selection_func (struct cublet_selection *cs, gpointer data) { GbkCubeview *cv = GBK_CUBEVIEW (data); if (gbk_cubeview_is_animating (cv)) return; if (select_is_selected (cs)) { const struct facet_selection *selection = select_get (cs); GLfloat turn_axis[4]; vector v; short axis; short dir; int slice; getTurnAxis (cv->cube, selection, turn_axis); axis = vector2axis (turn_axis); dir = turnDir (turn_axis); /* !!!!!! We are accessing private cube data. */ slice = cv->cube->blocks[selection->block].transformation[12 + axis]; /* Delete the old move and create a new one */ move_unref (cv->pending_movement); /* Reverse the direction when the shift key is down */ { GdkDisplay *display = gtk_widget_get_display (GTK_WIDGET (cv)); GdkModifierType keymask; gdk_display_get_pointer (display, NULL, NULL, NULL, &keymask); if ( keymask & GDK_SHIFT_MASK) dir = !dir; } cv->pending_movement = move_create (slice, axis, dir); /* Here we take the orientation of the selected quadrant and multiply it by the projection matrix. The result gives us the angle (on the screen) at which the mouse cursor needs to be drawn. */ { Matrix proj; glGetFloatv (GL_PROJECTION_MATRIX, proj); gbk_cube_get_quadrant_vector (cv->cube, selection->block, selection->face, selection->quadrant, v); vector_transform_in_place (v, proj); cv->cursor_angle = atan2 (v[0], v[1]) * 180.0 / M_PI; } } GtkWidget *w = cublet_selection_get_widget (cs); set_mouse_cursor (w, cs); gbk_cubeview_redisplay (GBK_CUBEVIEW (w)); } gnubik-2.4.3/src/move.c0000644000175000017460000000666513070435673011653 00000000000000/* Copyright (c) 2011 John Darrington This program 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 3 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, see . */ #include #include "move.h" #include #if MD_OPAQUE /* A structure containing information about a movement taking place. */ struct move_data { int slice; /* Zero is the centre of the cube */ short dir; /* 0 = cw, 1 = ccw */ short axis; /* [0,2] */ short turns; /* Normally 1 or 2 */ Slice_Blocks *blocks_in_motion; }; #endif void move_set_turns (struct move_data *m, int turns) { m->turns = turns; } struct move_data * move_create (int slice, short axis, short dir) { struct move_data *m = g_slice_alloc (sizeof (*m)); m->blocks_in_motion = NULL; /* Default to a turn of 90 degrees */ m->turns = 1; m->slice = slice; m->dir = dir; m->axis = axis; m->ref = 1; return m; } void move_dump (const struct move_data *m) { g_print ("Slice: %d; Axis: %d; Dir: %d; Turns: %d; bm(%p)\n", m->slice, m->axis, m->dir, m->turns, m->blocks_in_motion); } /* Release the resources associated with the Slice_Block. */ static void free_slice_blocks (Slice_Blocks * slice) { if (slice && --slice->ref == 0) { if (slice->blocks) g_free (slice->blocks); g_free (slice); } } static void move_free (struct move_data *m) { free_slice_blocks (m->blocks_in_motion); g_slice_free (struct move_data, m); } #define NOREFCOUNTING 0 #if NOREFCOUNTING static struct move_data * x_move_unref (struct move_data *m) { if (m == NULL) return NULL; move_free (m); return NULL; } #else static struct move_data * x_move_unref (struct move_data *m) { if (NULL == m) return NULL; if (0 == --m->ref) { move_free (m); return NULL; } return m; } #endif void move_unref (const struct move_data *m_) { struct move_data *m = (struct move_data *) m_; x_move_unref (m); } #if NOREFCOUNTING const struct move_data * move_ref (const struct move_data *m) { return move_copy (m); } #else const struct move_data * move_ref (const struct move_data *m) { g_assert (m); ((struct move_data *) m)->ref++; return m; } #endif struct move_data * move_copy (const struct move_data *n) { if (n == NULL) return NULL; struct move_data *m = g_slice_alloc0 (sizeof (*m)); m->blocks_in_motion = n->blocks_in_motion; if (m->blocks_in_motion) m->blocks_in_motion->ref++; m->turns = n->turns; m->slice = n->slice; m->dir = n->dir; m->axis = n->axis; m->ref = 1; return m; } GType move_get_type (void) { static GType t = 0; if (t == 0) { t = g_boxed_type_register_static ("gnubik-move", (GBoxedCopyFunc) move_copy, (GBoxedFreeFunc) x_move_unref); } return t; } short move_turns (const struct move_data *m) { return m->turns; } short move_dir (const struct move_data *m) { return m->dir; } short move_axis (const struct move_data *m) { return m->axis; } gnubik-2.4.3/src/menus.h0000644000175000017460000000246613070435673012034 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #ifndef WIDGET_SET_H #define WIDGET_SET_H #include #include "cube.h" #include "dialogs.h" GtkWidget *create_menubar (GbkGame *); GtkWidget *create_play_toolbar (GbkGame *); enum { PLAY_TOOLBAR_BACK = 0x0b << 0, PLAY_TOOLBAR_STOP = 0x01 << 2, PLAY_TOOLBAR_PLAY = 0x03 << 4 }; void set_toolbar_state (unsigned state); GtkWidget *create_statusbar (GbkGame *); /* Popup an error dialog box */ void error_dialog (GtkWindow * parent, const char *format, ...); void start_new_game (GbkGame *, int size0, int size1, int size2, gboolean scramble); #endif gnubik-2.4.3/src/drwBlock.c0000644000175000017460000002724213070435673012446 00000000000000/* The routines which actually draw the blocks of the cube. Copyright (C) 1998, 2003, 2011 John Darrington This program 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 3 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, see . */ #include /* NB: glLoadName is a Mesa/OpenGL command, which loads a `name' so that the selection mechanism can identify an object . */ #include #include "drwBlock.h" #include #include "cube.h" #include "textures.h" #include "colour-dialog.h" /* We use a little bit of glut in debug mode */ #if DEBUG #include void renderString (const char *string) { int i = 0; for (i = 0; i < strlen (string); ++i) { glutStrokeCharacter (GLUT_STROKE_MONO_ROMAN, string[i]); } } #endif typedef enum { COL_BLACK, COL_WHITE } colour_type; static const GLfloat colors[][3] = { {0.0, 0.0, 0.0}, /*Black */ {1.0, 1.0, 1.0} /*White */ }; static void draw_face (GbkCubeview *, GLint face, int block_id, GLboolean draw_names); /* this macro produces +1 if i is even. -1 if i is odd */ /* We use it to transform the faces of the block from zero, to the appropriate place */ #define SHIFT(i) ((i%2) * 2 -1) /* Render the block pointed to by BLOCK_ID. If ANCILLIARY is true, render the ancialliary components also. */ static void draw_block (GbkCubeview * cv, int block_id, GLboolean ancilliary) { int i; /* Load the name of this block */ glLoadName (block_id); /* Start a new name level ( for the face of the block) */ glPushName (-1); /* Rasterise only the exterior faces, to speed things up */ glEnable (GL_CULL_FACE); for (i = 0; i < 6; i++) { int mask; glPushMatrix (); switch (i) { case 1: case 0: glTranslated (0, 0, SHIFT (i)); break; case 2: case 3: glTranslated (0, SHIFT (i), 0); glRotatef (-90, 1, 0, 0); break; case 4: case 5: glTranslated (SHIFT (i), 0, 0); glRotatef (90, 0, 1, 0); break; } /* make sure all the sides are faced with their visible surface pointing to the outside!! */ if (!(i % 2)) glRotatef (180, 1, 0, 0); /* draw the face, iff it is visible */ mask = 0x01 << i; if (gbk_cube_get_visible_faces (cv->cube, block_id) & mask) { glLoadName (i); draw_face (cv, i, block_id, ancilliary); } glPopMatrix (); } glPopName (); } /* end block */ /* render FACE of BLOCK_ID. If DRAW_NAMES is true, the render the ancillary polygons used for selection. */ static void draw_face (GbkCubeview * cv, GLint face, int block_id, GLboolean draw_names) { point p1; point p2; vector v; /* lratio is the proportion of a face's linear dimension, which is coloured. That is, covered by a sticky label */ const GLfloat lratio = 0.9; /* First Draw the surface of the cube, that is the plastic material he thing is constructed from */ glColor3fv (colors[COL_BLACK]); if (draw_names) { /* the dead zone is the space on the square, which pointing to with the mouse will not change the selection. This gives a bit of histeresis, and makes it easier to use. */ const GLfloat deadZone = 0.02; const GLfloat limit1 = (1 - deadZone); const GLfloat limit2 = (1 - 2 * deadZone); /* This polygon is drawn as four quadrants, thus: _______ |\ /| | \ / | | \ / | | \ | | / \ | | / \ | |/____ \| The reason for this is to provide support for an enhanced selection mechanism which can detect which edge of the face is being pointed to. */ p1[0] = 0; p1[1] = 0; p1[2] = 0; p1[3] = 1; p2[0] = 0; p2[1] = 0; p2[2] = 1; p2[3] = 1; vector_from_points (v, p2, p1); glPushName (0); p1[0] = -deadZone; p1[1] = 0; p1[2] = 0; p1[3] = 1; p2[0] = -limit1; p2[1] = 0; p2[2] = 0; p2[3] = 1; glBegin (GL_POLYGON); glVertex3fv (p1); glVertex3d (-limit1, limit2, 0); glVertex3d (-limit1, -limit2, 0); glEnd (); vector_from_points (v, p2, p1); gbk_cube_set_quadrant_vector (cv->cube, block_id, face, 0, v); glLoadName (1); p1[0] = 0; p1[1] = -deadZone; p1[2] = 0; p2[0] = 0; p2[1] = limit1; p2[2] = 0; glBegin (GL_POLYGON); glVertex3fv (p1); glVertex3d (limit2, limit1, 0); glVertex3d (-limit2, limit1, 0); glEnd (); vector_from_points (v, p2, p1); gbk_cube_set_quadrant_vector (cv->cube, block_id, face, 1, v); glLoadName (2); p1[0] = deadZone; p1[1] = 0; p1[2] = 0; p2[0] = limit1; p2[1] = 0; p2[2] = 0; glBegin (GL_POLYGON); glVertex3fv (p1); glVertex3d (limit1, -limit2, 0); glVertex3d (limit1, limit2, 0); glEnd (); vector_from_points (v, p2, p1); gbk_cube_set_quadrant_vector (cv->cube, block_id, face, 2, v); glLoadName (3); p1[0] = 0; p1[1] = deadZone; p1[2] = 0; p2[0] = 0; p2[1] = -limit1; p2[2] = 0; glBegin (GL_POLYGON); { glVertex3d (0, -deadZone, 0); glVertex3fv (p1); glVertex3d (-limit2, -limit1, 0); glVertex3d (limit2, -limit1, 0); } glEnd (); glPopName (); vector_from_points (v, p2, p1); gbk_cube_set_quadrant_vector (cv->cube, block_id, face, 3, v); } /* Now do the colours (ie the little sticky labels) */ glColor3fv (cv->colour[face]); glTranslatef (0, 0, 0.01); glScalef (lratio, lratio, lratio); if (-1 == cv->texName[face]) { glDisable (GL_TEXTURE_2D); } else { glEnable (GL_TEXTURE_2D); if (cv->surface[face] != SURFACE_COLOURED) glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); else glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glBindTexture (GL_TEXTURE_2D, cv->texName[face]); } glBegin (GL_POLYGON); { GLfloat iss_x = 0; GLfloat iss_y = 0; GLint xpos = 0; GLint ypos = 0; if (cv->surface[face] == SURFACE_MOSAIC) { switch (face) { case 0: case 1: iss_x = 1.0 / gbk_cube_get_size (cv->cube, 0); iss_y = 1.0 / gbk_cube_get_size (cv->cube, 1); xpos = block_id % gbk_cube_get_size (cv->cube, 0); ypos = (block_id % (gbk_cube_get_size (cv->cube, 0) * gbk_cube_get_size (cv->cube, 1))) / gbk_cube_get_size (cv->cube, 0); break; case 2: case 3: iss_x = 1.0 / gbk_cube_get_size (cv->cube, 0); iss_y = 1.0 / gbk_cube_get_size (cv->cube, 2); xpos = block_id % (gbk_cube_get_size (cv->cube, 0) * gbk_cube_get_size (cv->cube, 1)) % gbk_cube_get_size (cv->cube, 0); ypos = block_id / (gbk_cube_get_size (cv->cube, 0) * gbk_cube_get_size (cv->cube, 1)); break; case 4: case 5: iss_x = 1.0 / gbk_cube_get_size (cv->cube, 2); iss_y = 1.0 / gbk_cube_get_size (cv->cube, 1); xpos = block_id / (gbk_cube_get_size (cv->cube, 0) * gbk_cube_get_size (cv->cube, 1)); ypos = block_id % (gbk_cube_get_size (cv->cube, 0) * gbk_cube_get_size (cv->cube, 1)) / gbk_cube_get_size (cv->cube, 0); break; } /* Invert positions as necessary */ switch (face) { case 1: ypos = gbk_cube_get_size (cv->cube, 1) - ypos - 1; break; case 5: ypos = gbk_cube_get_size (cv->cube, 1) - ypos - 1; /* fallthrough */ case 4: xpos = gbk_cube_get_size (cv->cube, 2) - xpos - 1; break; case 2: ypos = gbk_cube_get_size (cv->cube, 2) - ypos - 1; break; } } else { /* TILED */ xpos = ypos = 0; iss_x = iss_y = 1.0; } glTexCoord2f (iss_x * xpos, iss_y * (ypos + 1)); glVertex3d (-1, -1, 0); glTexCoord2f (iss_x * (xpos + 1), iss_y * (ypos + 1)); glVertex3d (1, -1, 0); glTexCoord2f (iss_x * (xpos + 1), iss_y * ypos); glVertex3d (1, 1, 0); glTexCoord2f (iss_x * xpos, iss_y * ypos); glVertex3d (-1, 1, 0); } glEnd (); glDisable (GL_TEXTURE_2D); #if DEBUG { char str[4]; /* render the block number */ glPushMatrix (); glColor3f (0, 0, 0); glTranslatef (-1, -0.8, 0.1); glScalef (0.01, 0.01, 0.01); snprintf (str, 4, "%d", block_id); renderString (str); glPopMatrix (); /* render the face number, a little bit smaller so we can see what's what. */ glPushMatrix (); glTranslatef (+0.5, +0.4, 0.1); glScalef (0.005, 0.005, 0.005); snprintf (str, 4, "%d", face); renderString (str); glPopMatrix (); } #endif } /* render the cube */ void drawCube (GbkCube * cube, GLboolean ancilliary, GbkCubeview * cv) { int i; #if DEBUG { GLfloat offset = 1.6 * gbk_cube_get_size (cube, 0); /* Show the directions of the axes */ glColor3f (1, 1, 1); /* X axis */ glPushMatrix (); glTranslatef (-offset, -offset, 0); glBegin (GL_LINES); glVertex3f (0, 0, 0); glVertex3f (2 * gbk_cube_get_size (cube, 0), 0, 0); glEnd (); glRasterPos3d (offset * 1.1, 0, 0); glutBitmapCharacter (GLUT_BITMAP_9_BY_15, '0'); glPopMatrix (); /* Y axis */ glPushMatrix (); glTranslatef (-offset, -offset, 0); glBegin (GL_LINES); glVertex3f (0, 0, 0); glVertex3f (0, 2 * gbk_cube_get_size (cube, 1), 0); glEnd (); glRasterPos3d (0.1 * offset, offset, 0); glutBitmapCharacter (GLUT_BITMAP_9_BY_15, '1'); glPopMatrix (); /* Z axis */ glPushMatrix (); glTranslatef (-offset, -offset, 0); glBegin (GL_LINES); glVertex3f (0, 0, 0); glVertex3f (0, 0, 2 * gbk_cube_get_size (cube, 2)); glEnd (); glRasterPos3d (0.1 * offset, 0, offset); glutBitmapCharacter (GLUT_BITMAP_9_BY_15, '2'); glPopMatrix (); } #endif for (i = 0; i < gbk_cube_get_number_of_blocks (cube); i++) { int j = 0; Slice_Blocks *moving_blocks = NULL; if (cv->current_move && cv->current_move->blocks_in_motion) moving_blocks = cv->current_move->blocks_in_motion; /* Find out if this block is one of those currently being turned. If so, j will be < turning_block_qty */ if (moving_blocks) for (j = 0; j < moving_blocks->number_blocks; j++) { if (moving_blocks->blocks[j] == i) break; } glPushMatrix (); if (moving_blocks && j != moving_blocks->number_blocks) { /* Blocks which are in motion, need to be animated. so we rotate them according to however much the animation angle is */ GLdouble angle = cv->animation_angle; int unity = 1; if (!move_dir (cv->current_move)) unity = -1; switch (move_axis (cv->current_move)) { case 0: case 3: glRotatef (angle, unity, 0, 0); break; case 1: case 4: glRotatef (angle, 0, unity, 0); break; case 2: case 5: glRotatef (angle, 0, 0, unity); break; } } { Matrix M; /* place the block in its current position and orientation */ gbk_cube_get_block_transform (cv->cube, i, M); glPushMatrix (); glMultMatrixf (M); /* and draw the block */ draw_block (cv, i, ancilliary); glPopMatrix (); } glPopMatrix (); } } gnubik-2.4.3/src/swatch.h0000644000175000017460000000355013070435673012171 00000000000000/* Copyright (c) 2011 John Darrington This program 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 3 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, see . */ #ifndef __GBK_SWATCH_H__ #define __GBK_SWATCH_H__ #include #include #include "drwBlock.h" #define GBK_TYPE_SWATCH (gbk_swatch_get_type ()) #define GBK_SWATCH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GBK_TYPE_SWATCH, GbkSwatch)) #define GBK_IS_SWATCH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GBK_TYPE_SWATCH)) #define GBK_SWATCH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GBK_TYPE_SWATCH, GbkSwatchClass)) #define GBK_IS_SWATCH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GBK_TYPE_SWATCH)) #define GBK_SWATCH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GBK_TYPE_SWATCH, GbkSwatchClass)) typedef struct _GbkSwatch GbkSwatch; typedef struct _GbkSwatchClass GbkSwatchClass; struct _GbkSwatch { GtkToggleButton parent_instance; GtkWidget *da; GdkGC *gc; GdkColor *color; GdkPixbuf *pixbuf; enum surface stype; }; struct _GbkSwatchClass { GtkToggleButtonClass parent_class; /* class members */ }; /* used by GBK_TYPE_SWATCH */ GType gbk_swatch_get_type (void); /* * Method definitions. */ GtkWidget *gbk_swatch_new (void); #endif /* __SWATCH_H__ */ gnubik-2.4.3/src/select.h0000644000175000017460000000346213070435673012161 00000000000000/* A system to permit user selection of a block and rotation axis of a magic cube. Copyright (C) 1998, 2011 John Darrington This program 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 3 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, see . */ #ifndef SELECT_H #define SELECT_H #include #include #include "cubeview.h" struct facet_selection { int block; int face; int quadrant; }; struct cublet_selection; typedef void select_func (struct cublet_selection *, gpointer data); /* Initialise the selection library */ struct cublet_selection *select_create (GtkWidget * w, int holdoff, double precision, select_func * do_this, gpointer data); void select_destroy (struct cublet_selection *); /* Temporarily enable/disable selection */ void select_disable (struct cublet_selection *); void select_enable (struct cublet_selection *); void select_update (GbkCubeview * cv, struct cublet_selection *cs); /* Return a pointer to a structre containing the selected items */ const struct facet_selection *select_get (const struct cublet_selection *cs); /* returns true if a block has been selected */ gboolean select_is_selected (const struct cublet_selection *cs); GtkWidget *cublet_selection_get_widget (const struct cublet_selection *cs); #endif gnubik-2.4.3/src/cube_i.h0000644000175000017460000000502413070435673012124 00000000000000/* Copyright (c) 2004 Dale Mellor, based on work which is Copyright (C) 1998, 2003, 2009, 2011 John Darrington This program 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 3 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, see . */ #ifndef CUBE_I_H #define CUBE_I_H #ifndef __GBK_CUBE_H__ #error This is a private header file and should not be included directly in any user source code. #endif #include "txfm.h" typedef struct _Face { /* FIXME: This belongs in the view. Not the cube */ /* An array of vectors showing the orientation of the blocks. There are four vectors per face. These are used to orientate the mouse pointer, to detect when the cube has been solved and to provide feedback to clients querying the state. */ /* FIXME: This belongs in the view. Not the cube. */ vector quadrants[4]; /* The NORMAL vector is orthogonal to the face of the block. When all normals are in the same direction, the cube colours are correct, but not necessarily their orientations. */ vector normal; /* The UP vector shows the orienation of the squares on the faces. When the cube is properly solved. The normals and the ups are in the same direction. */ vector up; } Face; typedef struct _Block { /* Bit-field indicating which faces are on the surface of the cube, and should therefore be rendered to the framebuffer. */ unsigned int visible_faces; /* A set of attributes for each face (including internal ones!) */ Face face[6]; /* The position from the centre of the cube, and the rotation from the 'natural' position (note that the location vector is accessed as transformation+12). */ Matrix transformation; } Block; #define BLOCK_ERROR_MESSAGE_BUFFER_LEN 255 #if 0 struct cube { /* The number of blocks on each side of the cube */ int size[3]; /* cube_size ** 3 */ int number_blocks; /* A set of attributes for every block (including internal ones!) */ Block *blocks; }; #endif #endif /* Defined CUBE_I_H. */ gnubik-2.4.3/src/cursors.h0000644000175000017460000000204113070435673012372 00000000000000/* Routines to set mouse cursors Copyright (C) 2003 John Darrington This program 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 3 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, see . */ #ifndef CURSORS_H #define CURSORS_H #include #define n_CURSORS 16 extern GdkCursor *cursor[n_CURSORS * 2]; extern const float cursor_interval; void get_cursor (int index, const unsigned char **data, const unsigned char **mask, int *height, int *width, int *hot_x, int *hot_y, gboolean rev); #endif gnubik-2.4.3/src/guile-hooks.h0000644000175000017460000000204213070435673013121 00000000000000/* Copyright (C) 2004, 2010 Dale Mellor This program 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 3 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, see . */ #ifndef GUILE_HOOKS_H #define GUILE_HOOKS_H #include /* The method which seeks out all scripts, and makes them known to the UI manager. The scripts can callback to the C world to register themselves. The function must be called exactly once. */ void startup_guile_scripts (GtkUIManager * uim); #endif /* defined GUILE_HOOKS_H. */ gnubik-2.4.3/src/glarea-common.c0000644000175000017460000000652713070435673013423 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #include #include "quarternion.h" #include #include #include "glarea.h" #include "cube.h" #include struct jitter_v { GLdouble x; GLdouble y; }; static const struct jitter_v j8[8] = { {0.5625, 0.4375}, {0.0625, 0.9375}, {0.3125, 0.6875}, {0.6875, 0.8125}, {0.8125, 0.1875}, {0.9375, 0.5625}, {0.4375, 0.0625}, {0.1875, 0.3125} }; void perspectiveSet (struct scene_view *scene) { gluPerspective (scene->fovy, 1, scene->cp_near, scene->cp_far); } /* accFrustum and accPerspective are taken from p397 of the Red Book */ static void accFrustum (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar, GLdouble pixdx, GLdouble pixdy, GLdouble eyedx, GLdouble eyedy, GLdouble focus) { GLdouble dx = 0; GLdouble dy = 0; GLdouble xwsize, ywsize; GLint viewport[4]; glGetIntegerv (GL_VIEWPORT, viewport); xwsize = right - left; ywsize = top - bottom; dx = -(pixdx * xwsize / (GLdouble) viewport[2] + eyedx * zNear / focus); dy = -(pixdy * ywsize / (GLdouble) viewport[3] + eyedy * zNear / focus); glFrustum (left + dx, right + dy, bottom + dy, top + dy, zNear, zFar); } static void accPerspective (const struct scene_view *sv, GLdouble aspect, GLdouble pixdx, GLdouble pixdy, GLdouble eyedx, GLdouble eyedy, GLdouble focus) { GLdouble fov2, left, right, top, bottom; fov2 = (sv->fovy * M_PI / 180.0) / 2.0; top = sv->cp_near / (cos (fov2) / sin (fov2)); bottom = -top; right = top * aspect; left = -right; accFrustum (left, right, bottom, top, sv->cp_near, sv->cp_far, pixdx, pixdy, eyedx, eyedy, focus); } void scene_init (GbkCubeview * cv) { GbkCube *cube = cv->cube; cv->scene.bounding_sphere_radius = gbk_cube_get_size (cube, 0) * gbk_cube_get_size (cube, 0); cv->scene.bounding_sphere_radius += gbk_cube_get_size (cube, 1) * gbk_cube_get_size (cube, 1); cv->scene.bounding_sphere_radius += gbk_cube_get_size (cube, 2) * gbk_cube_get_size (cube, 2); cv->scene.bounding_sphere_radius = sqrt (cv->scene.bounding_sphere_radius); cv->scene.fovy = 33.0; cv->scene.cp_near = cv->scene.bounding_sphere_radius / (tan (cv->scene.fovy * M_PI / 360.0)); cv->scene.cp_far = cv->scene.cp_near + 2 * cv->scene.bounding_sphere_radius; } void projection_init (struct scene_view *scene, int jitter) { if (have_clip_volume_hint) glHint (GL_CLIP_VOLUME_CLIPPING_HINT_EXT, GL_FASTEST); glEnable (GL_DEPTH_TEST); glClearColor (0, 0, 0, 0); glMatrixMode (GL_PROJECTION); glLoadIdentity (); accPerspective (scene, 1, j8[jitter].x, j8[jitter].y, 0.0, 0.0, 1.0); } gnubik-2.4.3/src/game.h0000644000175000017460000000666613070435673011624 00000000000000/* Copyright (c) 2011 John Darrington This program 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 3 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, see . */ #ifndef __GBK_GAME_H__ #define __GBK_GAME_H__ #include #include #include "cube.h" #include "cubeview.h" #define GBK_TYPE_GAME (gbk_game_get_type ()) #define GBK_GAME(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GBK_TYPE_GAME, GbkGame)) #define GBK_IS_GAME(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GBK_TYPE_GAME)) #define GBK_GAME_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GBK_TYPE_GAME, GbkGameClass)) #define GBK_IS_GAME_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GBK_TYPE_GAME)) #define GBK_GAME_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GBK_TYPE_GAME, GbkGameClass)) typedef struct _GbkGame GbkGame; typedef struct _GbkGameClass GbkGameClass; enum mode { MODE_NONE = 0, MODE_RECORD, MODE_PLAY, MODE_REWIND, }; struct GbkList { struct GbkList *prev; struct GbkList *next; const struct move_data *data; gboolean marked; }; struct _GbkGame { GObject parent_instance; /* instance members */ /* The toplevel window in which the game is played */ GtkWindow *toplevel; /* The cube */ GbkCube *cube; /* The cubeview which we'll consider as the master one */ GbkCubeview *masterview; /* A linked list of all the views, including the master */ GSList *views; enum mode mode; /* This is the end iterator. It represents ONE MOVE PAST the most recent move */ struct GbkList end_of_moves; /* Begin iterator. One BEFORE the first move */ struct GbkList start_of_moves; /* The "current" move. That is, the place in the queue that we are now. When not replaying, it's always equal to most_recent.prev */ struct GbkList *iter; int posn; int total; /* Id of the animate complete signal */ gulong animate_complete_id; guint mesg_id; }; struct _GbkGameClass { GObjectClass parent_class; /* class members */ }; /* used by GBK_TYPE_GAME */ GType gbk_game_get_type (void); /* * Method definitions. */ GObject *gbk_game_new (GbkCube * cube); void gbk_game_rewind (GbkGame * game); void gbk_game_replay (GbkGame * game); void gbk_game_stop_replay (GbkGame * game); void gbk_game_set_mark (GbkGame * game); void gbk_game_next_move (GbkGame * game); void gbk_game_prev_move (GbkGame * game); gboolean gbk_game_at_start (GbkGame * game); gboolean gbk_game_at_end (GbkGame * game); void gbk_game_reset (GbkGame * game); void gbk_game_remove_view (GbkGame * game, GbkCubeview * cv); void gbk_game_add_view (GbkGame * game, GbkCubeview * cv, gboolean master); void gbk_game_dump_moves (GbkGame * game); struct GbkList *gbk_game_insert_move (GbkGame * game, struct move_data *move, struct GbkList *where); void gbk_game_delete_moves (GbkGame * game, struct GbkList *from); #endif /* __GAME_H__ */ gnubik-2.4.3/src/version.c0000644000175000017460000000311213070435673012352 00000000000000/* A few functions to return version number and miscellaneous info. Copyright (C) 1998 John Darrington This program 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 3 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, see . */ #include #include "version.h" #include #include const char copyleft_notice[] = " This program is free software; you can redistribute it and/or modify\n" " it under the terms of the GNU General Public License as published by\n" " the Free Software Foundation; either version 3 of the License, or\n" " (at your option) any later version.\n" "\n" " This program is distributed in the hope that it will be useful, \n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" " GNU General Public License for more details.\n" "\n" " You should have received a copy of the GNU General Public License\n" " along with this program. If not, see .\n"; gnubik-2.4.3/src/version.h0000644000175000017460000000152313070435673012363 00000000000000/* A few functions to return version number and miscellaneous info. Copyright (C) 1998 John Darrington This program 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 3 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, see . */ #ifndef VERSION_H #define VERSION_H extern const char copyleft_notice[]; #endif gnubik-2.4.3/src/dialogs.c0000644000175000017460000001607013070435673012316 00000000000000/* GNUbik -- A 3 dimensional magic cube game. Copyright (C) 2003, 2004, 2011 John Darrington This program 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 3 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, see . */ #include #include #include "dialogs.h" #include #include "cube.h" #include "version.h" #include "drwBlock.h" #include "menus.h" #include "game.h" #include #include #include #define _(String) gettext (String) #define N_(String) (String) #define BOX_PADDING 10 struct preferences_state { GObject *adj[3]; GtkWidget *entry[3]; }; static struct preferences_state * pref_state_create (GtkBox * parent, const GbkGame * game) { gint i; struct preferences_state *ps = g_malloc (sizeof (*ps)); for (i = 0; i < 3; ++i) { ps->adj[i] = G_OBJECT ( gtk_adjustment_new (gbk_cube_get_size (game->cube, 0), 1, G_MAXFLOAT, 1, 1, 0)); g_object_ref (ps->adj[i]); ps->entry[i] = gtk_spin_button_new (GTK_ADJUSTMENT (ps->adj[i]), 0, 0); g_object_ref (ps->entry[i]); gtk_box_pack_start (parent, ps->entry[i], FALSE, FALSE, 0); } return ps; } static void pref_state_destroy (struct preferences_state *ps) { int i; for (i = 0; i < 3; ++i) { g_object_unref (ps->adj[i]); g_object_unref (ps->entry[i]); } g_free (ps); } /* Allows only cubic cubes if the togglebutton is active */ static void toggle_regular (GtkToggleButton * button, gpointer data) { gint i; struct preferences_state *ps = data; if (gtk_toggle_button_get_active (button)) { for (i = 0; i < 3; ++i) gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (ps->entry[i]), GTK_ADJUSTMENT (ps->adj[0])); gtk_adjustment_value_changed (GTK_ADJUSTMENT (ps->adj[0])); } else { for (i = 0; i < 3; ++i) gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (ps->entry[i]), GTK_ADJUSTMENT (ps->adj[i])); } } static struct preferences_state * create_dimension_widget (GtkContainer * parent, const GbkGame * game) { gint i; GtkWidget *label = gtk_label_new (_("Size of cube:")); GtkWidget *hbox = gtk_hbox_new (FALSE, BOX_PADDING); GtkWidget *vbox = gtk_vbox_new (TRUE, BOX_PADDING); GtkWidget *checkbox = gtk_check_button_new_with_mnemonic (_("Re_gular cube")); GtkWidget *vbox2 = gtk_vbox_new (TRUE, BOX_PADDING); struct preferences_state *ps = pref_state_create (GTK_BOX (vbox), game); gtk_widget_set_tooltip_text (vbox, _("Sets the number of blocks in each side")); gtk_widget_set_tooltip_text (checkbox, _ ("Allow only cubes with all sides equal size")); g_signal_connect (checkbox, "toggled", G_CALLBACK (toggle_regular), ps); gtk_box_pack_start (GTK_BOX (vbox2), label, TRUE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox2), checkbox, TRUE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), vbox2, TRUE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, FALSE, 0); for (i = 0; i < 3; ++i) gtk_spin_button_set_value (GTK_SPIN_BUTTON (ps->entry[i]), gbk_cube_get_size (game->cube, i)), gtk_widget_show_all (hbox); gtk_container_add (parent, hbox); return ps; } void about_dialog (GtkWidget * w, GtkWindow * toplevel) { /* Create the widgets */ GtkWidget *dialog = gtk_about_dialog_new (); gtk_window_set_icon_name (GTK_WINDOW (dialog), "gnubik"); gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); gtk_window_set_transient_for (GTK_WINDOW (dialog), toplevel); gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG (dialog), _(PACKAGE_NAME)); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG (dialog), PACKAGE_VERSION); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG (dialog), PACKAGE_URL); gtk_about_dialog_set_license (GTK_ABOUT_DIALOG (dialog), copyleft_notice); gtk_about_dialog_set_logo_icon_name (GTK_ABOUT_DIALOG (dialog), "gnubik"); gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG (dialog), _("A 3 dimensional magic cube puzzle")); gtk_about_dialog_set_translator_credits (GTK_ABOUT_DIALOG (dialog), /* TRANSLATORS: Do not translate this string. Instead, use it to list the people who have helped with translation to your language. */ _("translator-credits")); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG (dialog), "Copyright © 1998, 2003 John Darrington;\n 2004 John Darrington, Dale Mellor;\n2011 John Darrington"); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (GTK_WIDGET (dialog)); } void new_game_dialog (GtkWidget * w, GbkGame * game) { gint response; GtkWidget *dialog = gtk_dialog_new_with_buttons (_("New Game"), game->toplevel, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); GtkWidget *vbox = gtk_vbox_new (FALSE, 5); GtkWidget *frame_dimensions = gtk_frame_new (_("Dimensions")); g_object_set (frame_dimensions, "shadow-type", GTK_SHADOW_NONE, NULL); gtk_window_set_icon_name (GTK_WINDOW (dialog), "gnubik"); gtk_window_set_transient_for (GTK_WINDOW (dialog), game->toplevel); struct preferences_state *ps = create_dimension_widget (GTK_CONTAINER (frame_dimensions), game); GtkWidget *frame_pos = gtk_frame_new (_("Initial position")); GtkWidget *bb = gtk_vbutton_box_new (); GtkWidget *random_state = gtk_radio_button_new_with_mnemonic_from_widget (NULL, _("_Random")); GtkWidget *solved_state = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (random_state), _("_Solved")); g_object_set (frame_pos, "shadow-type", GTK_SHADOW_NONE, NULL); gtk_container_add (GTK_CONTAINER (bb), random_state); gtk_container_add (GTK_CONTAINER (bb), solved_state); gtk_container_add (GTK_CONTAINER (frame_pos), bb); gtk_box_pack_start (GTK_BOX (vbox), frame_pos, FALSE, 0, 0); gtk_box_pack_start (GTK_BOX (vbox), frame_dimensions, FALSE, 0, 0); gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox); gtk_widget_show_all (gtk_dialog_get_content_area (GTK_DIALOG (dialog))); response = gtk_dialog_run (GTK_DIALOG (dialog)); if (response == GTK_RESPONSE_ACCEPT) { start_new_game (game, gtk_spin_button_get_value (GTK_SPIN_BUTTON (ps->entry[0])), gtk_spin_button_get_value (GTK_SPIN_BUTTON (ps->entry[1])), gtk_spin_button_get_value (GTK_SPIN_BUTTON (ps->entry[2])), gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (random_state))); } pref_state_destroy (ps); gtk_widget_destroy (dialog); } gnubik-2.4.3/src/quarternion.h0000644000175000017460000000253413070435673013250 00000000000000/* A little library to do quarternion arithmetic Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #ifndef QUARTERNION_H #define QUARTERNION_H #include "txfm.h" struct quarternion { float w; float x; float y; float z; }; typedef struct quarternion Quarternion; void quarternion_get_inverse (Quarternion * inv, const Quarternion * q); void quarternion_from_rotation (Quarternion * q, const vector u, float theta); void quarternion_dump (const Quarternion * q); void quarternion_to_matrix (Matrix M, const Quarternion * q); /* Pre multiply q1 by q2 */ void quarternion_pre_mult (Quarternion * q1, const Quarternion * q2); void quarternion_set_to_unit (Quarternion * q); #endif /* QUARTERNION_H */ gnubik-2.4.3/src/swatch.c0000644000175000017460000002030013070435673012154 00000000000000/* Copyright (c) 2011 John Darrington This program 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 3 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, see . */ #include #include "swatch.h" #include #include "colour-dialog.h" #include #define _(String) gettext (String) #define N_(String) (String) static GtkWidgetClass *parent_class = NULL; enum { PROP_0 = 0, PROP_COLOR, PROP_TEXTURE, PROP_SURFACE }; static void swatch_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GbkSwatch *sw = GBK_SWATCH (object); switch (prop_id) { case PROP_COLOR: { GdkColor *new_color = g_value_get_boxed (value); if (new_color) { if (sw->color) gdk_color_free (sw->color); sw->color = gdk_color_copy (new_color); if (gtk_widget_get_realized (GTK_WIDGET (sw))) { gdk_gc_set_rgb_fg_color (sw->gc, sw->color); gtk_widget_queue_draw (GTK_WIDGET (sw)); } } else g_warning ("%s", "Invalid color property for swatch"); } break; case PROP_TEXTURE: sw->pixbuf = g_value_get_object (value); if (sw->pixbuf) { if (sw->stype == SURFACE_COLOURED) sw->stype = SURFACE_TILED; } else sw->stype = SURFACE_COLOURED; gtk_widget_queue_draw (GTK_WIDGET (sw)); break; case PROP_SURFACE: sw->stype = g_value_get_enum (value); if (sw->stype == SURFACE_COLOURED) sw->pixbuf = NULL; gtk_widget_queue_draw (GTK_WIDGET (sw)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }; } static void swatch_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GbkSwatch *sw = GBK_SWATCH (object); switch (prop_id) { case PROP_COLOR: g_value_set_boxed (value, sw->color); break; case PROP_TEXTURE: g_value_set_object (value, sw->pixbuf); break; case PROP_SURFACE: g_value_set_enum (value, sw->stype); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; }; } static void gbk_swatch_init (GbkSwatch * sw) { sw->da = gtk_drawing_area_new (); gtk_container_add (GTK_CONTAINER (sw), sw->da); gtk_widget_set_tooltip_text (GTK_WIDGET (sw), _ ("A sample of the colour. You can click and select a new colour, or drag one to this space.")); sw->color = NULL; sw->pixbuf = NULL; sw->stype = SURFACE_COLOURED; } static gboolean on_da_expose (GtkWidget * w, GdkEventExpose * event, gpointer data) { GtkAllocation allocation; GbkSwatch *sw = GBK_SWATCH (data); gtk_widget_get_allocation (w, &allocation); if (sw->pixbuf == NULL) { gdk_draw_rectangle (gtk_widget_get_window (w), sw->gc, TRUE, 0, 0, allocation.width, allocation.height); } else { GdkPixbuf *scaled_pixbuf = 0; gint width, height; gdk_drawable_get_size (gtk_widget_get_window (w), &width, &height); scaled_pixbuf = gdk_pixbuf_scale_simple (sw->pixbuf, width, height, GDK_INTERP_NEAREST); g_assert (scaled_pixbuf); gdk_draw_pixbuf (gtk_widget_get_window (w), sw->gc, scaled_pixbuf, 0, 0, 0, 0, width, height, GDK_RGB_DITHER_NONE, 0, 0); g_object_unref (scaled_pixbuf); } return FALSE; } #define SWATCH_WIDTH 64 #define SWATCH_HEIGHT 64 enum { GBK_DRAG_FILELIST, GBK_DRAG_COLOUR }; static const GtkTargetEntry targets[2] = { {"text/uri-list", 0, GBK_DRAG_FILELIST}, {"application/x-color", 0, GBK_DRAG_COLOUR}, }; static void on_drag_data_rx (GtkWidget * widget, GdkDragContext * drag_context, gint x, gint y, GtkSelectionData * selection_data, guint info, guint time, gpointer user_data) { gboolean success = TRUE; if (gtk_selection_data_get_length (selection_data) < 0) { g_warning ("%s", "Empty drag data"); success = FALSE; goto end; } switch (info) { case GBK_DRAG_COLOUR: { guint16 *vals; GdkColor colour; if ((gtk_selection_data_get_format (selection_data) != 16) || (gtk_selection_data_get_length (selection_data) != 8)) { success = FALSE; g_warning ("%s", "Received invalid color data"); goto end; } vals = (guint16 *) gtk_selection_data_get_data (selection_data); colour.red = vals[0]; colour.green = vals[1]; colour.blue = vals[2]; g_object_set (widget, "color", &colour, NULL); break; } case GBK_DRAG_FILELIST: { gchar **s = g_strsplit ((const gchar *) gtk_selection_data_get_data (selection_data), "\r\n", 0); while (*s) { GdkPixbuf *pixbuf = NULL; gchar *utf8; gchar *filename; GError *gerr = 0; if (strcmp (*s, "") == 0) { s++; continue; } /* Convert to utf8. Is this necessary ?? */ utf8 = g_locale_to_utf8 (*s, -1, 0, 0, &gerr); if (gerr) { g_warning ("%s", gerr->message); g_clear_error (&gerr); gerr = 0; continue; } /* Extract the filename from the uri */ filename = g_filename_from_uri (utf8, 0, &gerr); if (gerr) { g_warning ("%s", gerr->message); g_clear_error (&gerr); continue; } g_free (utf8); pixbuf = create_pixbuf_from_file (filename, &gerr); g_free (filename); g_object_set (widget, "texture", pixbuf, NULL); /* For now, just use the first one. Later, we'll add some method for disambiguating multiple files */ break; s++; } } break; default: g_warning ("%s", "Unsupported drag data type"); break; } end: gtk_drag_finish (drag_context, success, FALSE, time); } static void realize (GtkWidget * w) { GbkSwatch *sw = GBK_SWATCH (w); if (GTK_WIDGET_CLASS (parent_class)->realize) GTK_WIDGET_CLASS (parent_class)->realize (w); gtk_widget_set_size_request (GTK_WIDGET (sw), SWATCH_WIDTH, SWATCH_HEIGHT); GdkWindow *pw = gtk_widget_get_parent_window (sw->da); sw->gc = gdk_gc_new (pw); if (sw->color) gdk_gc_set_rgb_fg_color (sw->gc, sw->color); gtk_drag_dest_set (w, GTK_DEST_DEFAULT_ALL, targets, 2, GDK_ACTION_COPY); g_signal_connect (sw->da, "expose-event", G_CALLBACK (on_da_expose), sw); g_signal_connect (sw, "drag-data-received", G_CALLBACK (on_drag_data_rx), 0); } static void gbk_swatch_class_init (GbkSwatchClass * klass) { GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GParamSpec *color_param_spec; GParamSpec *texture_param_spec; GParamSpec *surface_param_spec; parent_class = g_type_class_peek_parent (klass); gobject_class->set_property = swatch_set_property; gobject_class->get_property = swatch_get_property; widget_class->realize = realize; color_param_spec = g_param_spec_boxed ("color", "Colour", "The colour of the swatch", GDK_TYPE_COLOR, G_PARAM_READWRITE); texture_param_spec = g_param_spec_object ("texture", "Texture", "A pixbuf representing the texture of the swatch", GDK_TYPE_PIXBUF, G_PARAM_READWRITE); surface_param_spec = g_param_spec_enum ("surface", "Surface", "Tiled or Mosaic", GBK_TYPE_SURFACE, SURFACE_COLOURED, G_PARAM_READWRITE); g_object_class_install_property (gobject_class, PROP_COLOR, color_param_spec); g_object_class_install_property (gobject_class, PROP_TEXTURE, texture_param_spec); g_object_class_install_property (gobject_class, PROP_SURFACE, surface_param_spec); } G_DEFINE_TYPE (GbkSwatch, gbk_swatch, GTK_TYPE_TOGGLE_BUTTON); GtkWidget * gbk_swatch_new (void) { return g_object_new (gbk_swatch_get_type (), NULL); } gnubik-2.4.3/src/cursors.c0000644000175000017460000003254513070435673012401 00000000000000/* Routines to set mouse cursors Copyright (C) 2003, 2011 John Darrington This program 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 3 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, see . */ #include #include #include "cursors.h" GdkCursor *cursor[n_CURSORS * 2]; #define ene_data_width 16 #define ene_data_height 16 #define ene_data_x_hot 15 #define ene_data_y_hot 4 static const unsigned char ene_data_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x10, 0x80, 0x20, 0x40, 0x20, 0x20, 0x18, 0x10, 0x06, 0x08, 0xe1, 0x04, 0x9a, 0x02, 0x84, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define ese_data_width 16 #define ese_data_height 16 #define ese_data_x_hot 15 #define ese_data_y_hot 11 static const unsigned char ese_data_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x84, 0x01, 0x9a, 0x02, 0xe1, 0x04, 0x06, 0x08, 0x18, 0x10, 0x20, 0x20, 0x20, 0x40, 0x10, 0x80, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define nne_data_width 16 #define nne_data_height 16 #define nne_data_x_hot 11 #define nne_data_y_hot 0 static const unsigned char nne_data_bits[] = { 0x00, 0x0c, 0x00, 0x0a, 0x00, 0x09, 0x80, 0x08, 0x40, 0x08, 0x20, 0x08, 0x10, 0x08, 0x08, 0x08, 0x3c, 0x08, 0x20, 0x08, 0x20, 0x0b, 0x90, 0x0c, 0x90, 0x08, 0x48, 0x00, 0x50, 0x00, 0x20, 0x00 }; #define nnw_data_width 16 #define nnw_data_height 16 #define nnw_data_x_hot 4 #define nnw_data_y_hot 0 static const unsigned char nnw_data_bits[] = { 0x30, 0x00, 0x50, 0x00, 0x90, 0x00, 0x10, 0x01, 0x10, 0x02, 0x10, 0x04, 0x10, 0x08, 0x10, 0x10, 0x10, 0x3c, 0x10, 0x04, 0xd0, 0x04, 0x30, 0x09, 0x10, 0x09, 0x00, 0x12, 0x00, 0x0a, 0x00, 0x04 }; #define sse_data_width 16 #define sse_data_height 16 #define sse_data_x_hot 11 #define sse_data_y_hot 15 static const unsigned char sse_data_bits[] = { 0x20, 0x00, 0x70, 0x00, 0x58, 0x00, 0x90, 0x08, 0xb0, 0x0c, 0x20, 0x0b, 0x20, 0x08, 0x1c, 0x08, 0x08, 0x08, 0x10, 0x08, 0x20, 0x08, 0x40, 0x08, 0x80, 0x08, 0x00, 0x09, 0x00, 0x0a, 0x00, 0x0c }; #define ssw_data_width 16 #define ssw_data_height 16 #define ssw_data_x_hot 4 #define ssw_data_y_hot 15 static const unsigned char ssw_data_bits[] = { 0x00, 0x04, 0x00, 0x0e, 0x00, 0x1a, 0x10, 0x09, 0x30, 0x0d, 0xd0, 0x04, 0x10, 0x06, 0x10, 0x3c, 0x10, 0x10, 0x10, 0x08, 0x10, 0x04, 0x10, 0x02, 0x10, 0x01, 0x90, 0x00, 0x50, 0x00, 0x30, 0x00 }; #define wnw_data_width 16 #define wnw_data_height 16 #define wnw_data_x_hot 0 #define wnw_data_y_hot 4 static const unsigned char wnw_data_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x01, 0x08, 0x02, 0x04, 0x04, 0x04, 0x08, 0x18, 0x10, 0x60, 0x20, 0x87, 0x40, 0x59, 0x80, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 }; #define wsw_data_width 16 #define wsw_data_height 16 #define wsw_data_x_hot 0 #define wsw_data_y_hot 11 static const unsigned char wsw_data_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x21, 0x40, 0x59, 0x20, 0x86, 0x10, 0x60, 0x08, 0x18, 0x04, 0x04, 0x02, 0x04, 0x01, 0x08, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define ene_mask_width 16 #define ene_mask_height 16 #define ene_mask_x_hot 15 #define ene_mask_y_hot 4 static const unsigned char ene_mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xf0, 0xff, 0xe0, 0x7f, 0xe0, 0x3f, 0xf8, 0x1f, 0xfe, 0x0f, 0xff, 0x07, 0x9e, 0x03, 0x84, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define ese_mask_width 16 #define ese_mask_height 16 #define ese_mask_x_hot 15 #define ese_mask_y_hot 11 static const unsigned char ese_mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x84, 0x01, 0x9e, 0x03, 0xff, 0x07, 0xfe, 0x0f, 0xf8, 0x1f, 0xe0, 0x3f, 0xe0, 0x7f, 0xf0, 0xff, 0xf8, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define nne_mask_width 16 #define nne_mask_height 16 #define nne_mask_x_hot 11 #define nne_mask_y_hot 0 static const unsigned char nne_mask_bits[] = { 0x00, 0x0c, 0x00, 0x0e, 0x00, 0x0f, 0x80, 0x0f, 0xc0, 0x0f, 0xe0, 0x0f, 0xf0, 0x0f, 0xf8, 0x0f, 0xfc, 0x0f, 0xe0, 0x0f, 0xe0, 0x0f, 0xf0, 0x0c, 0xf0, 0x08, 0x78, 0x00, 0x70, 0x00, 0x20, 0x00 }; #define nnw_mask_width 16 #define nnw_mask_height 16 #define nnw_mask_x_hot 4 #define nnw_mask_y_hot 0 static const unsigned char nnw_mask_bits[] = { 0x30, 0x00, 0x70, 0x00, 0xf0, 0x00, 0xf0, 0x01, 0xf0, 0x03, 0xf0, 0x07, 0xf0, 0x0f, 0xf0, 0x1f, 0xf0, 0x3f, 0xf0, 0x07, 0xf0, 0x07, 0x30, 0x0f, 0x10, 0x0f, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x04 }; #define sse_mask_width 16 #define sse_mask_height 16 #define sse_mask_x_hot 11 #define sse_mask_y_hot 15 static const unsigned char sse_mask_bits[] = { 0x20, 0x00, 0x70, 0x00, 0x78, 0x00, 0xf0, 0x08, 0xf0, 0x0c, 0xe0, 0x0f, 0xe0, 0x0f, 0xfc, 0x0f, 0xf8, 0x0f, 0xf0, 0x0f, 0xe0, 0x0f, 0xc0, 0x0f, 0x80, 0x0f, 0x00, 0x0f, 0x00, 0x0e, 0x00, 0x0c }; #define ssw_mask_width 16 #define ssw_mask_height 16 #define ssw_mask_x_hot 4 #define ssw_mask_y_hot 15 static const unsigned char ssw_mask_bits[] = { 0x00, 0x04, 0x00, 0x0e, 0x00, 0x1e, 0x10, 0x0f, 0x30, 0x0f, 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x3f, 0xf0, 0x1f, 0xf0, 0x0f, 0xf0, 0x07, 0xf0, 0x03, 0xf0, 0x01, 0xf0, 0x00, 0x70, 0x00, 0x30, 0x00 }; #define wnw_mask_width 16 #define wnw_mask_height 16 #define wnw_mask_x_hot 0 #define wnw_mask_y_hot 4 static const unsigned char wnw_mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0xff, 0x0f, 0xfe, 0x07, 0xfc, 0x07, 0xf8, 0x1f, 0xf0, 0x7f, 0xe0, 0xff, 0xc0, 0x79, 0x80, 0x21, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 }; #define wsw_mask_width 16 #define wsw_mask_height 16 #define wsw_mask_x_hot 0 #define wsw_mask_y_hot 11 static const unsigned char wsw_mask_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x21, 0xc0, 0x79, 0xe0, 0xff, 0xf0, 0x7f, 0xf8, 0x1f, 0xfc, 0x07, 0xfe, 0x07, 0xff, 0x0f, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define s_data_width 16 #define s_data_height 16 #define s_data_x_hot 7 #define s_data_y_hot 15 static const unsigned char s_data_bits[] = { 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x42, 0x21, 0x46, 0x31, 0x5c, 0x1d, 0x74, 0x13, 0x08, 0x08, 0x08, 0x08, 0x10, 0x04, 0x10, 0x04, 0x20, 0x02, 0x20, 0x02, 0x40, 0x01, 0x40, 0x01, 0x80, 0x00 }; #define e_data_width 16 #define e_data_height 16 #define e_data_x_hot 15 #define e_data_y_hot 7 static const unsigned char e_data_bits[] = { 0x00, 0x00, 0x18, 0x00, 0x70, 0x00, 0xa0, 0x01, 0x20, 0x06, 0x40, 0x18, 0x7f, 0x60, 0x01, 0x80, 0x7f, 0x60, 0x40, 0x18, 0x60, 0x06, 0xa0, 0x01, 0x70, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define n_data_width 16 #define n_data_height 16 #define n_data_x_hot 8 #define n_data_y_hot 0 static const unsigned char n_data_bits[] = { 0x00, 0x01, 0x80, 0x02, 0x80, 0x02, 0x40, 0x04, 0x40, 0x04, 0x20, 0x08, 0x20, 0x08, 0x10, 0x10, 0x10, 0x10, 0xe8, 0x26, 0xb8, 0x3a, 0x8c, 0x62, 0x84, 0x42, 0x80, 0x02, 0x80, 0x02, 0x80, 0x03 }; #define e_mask_width 16 #define e_mask_height 16 #define e_mask_x_hot 15 #define e_mask_y_hot 7 static const unsigned char e_mask_bits[] = { 0x00, 0x00, 0x18, 0x00, 0x70, 0x00, 0xe0, 0x01, 0xe0, 0x07, 0xc0, 0x1f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xc0, 0x1f, 0xe0, 0x07, 0xe0, 0x01, 0x70, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00 }; #define n_mask_width 16 #define n_mask_height 16 #define n_mask_x_hot 8 #define n_mask_y_hot 0 static const unsigned char n_mask_bits[] = { 0x00, 0x01, 0x80, 0x03, 0x80, 0x03, 0xc0, 0x07, 0xc0, 0x07, 0xe0, 0x0f, 0xe0, 0x0f, 0xf0, 0x1f, 0xf0, 0x1f, 0xf8, 0x3f, 0xb8, 0x3b, 0x8c, 0x63, 0x84, 0x43, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03 }; #define s_mask_width 16 #define s_mask_height 16 #define s_mask_x_hot 7 #define s_mask_y_hot 15 static const unsigned char s_mask_bits[] = { 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc2, 0x21, 0xc6, 0x31, 0xdc, 0x1d, 0xfc, 0x1f, 0xf8, 0x0f, 0xf8, 0x0f, 0xf0, 0x07, 0xf0, 0x07, 0xe0, 0x03, 0xe0, 0x03, 0xc0, 0x01, 0xc0, 0x01, 0x80, 0x00 }; #define ne_data_width 16 #define ne_data_height 16 #define ne_data_x_hot 15 #define ne_data_y_hot 0 static const unsigned char ne_data_bits[] = { 0x00, 0xc0, 0x00, 0xb8, 0x00, 0x47, 0xe0, 0x40, 0x18, 0x40, 0x20, 0x20, 0xc0, 0x20, 0x40, 0x20, 0x20, 0x12, 0x10, 0x13, 0x88, 0x14, 0x44, 0x08, 0x22, 0x08, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00 }; #define se_data_width 16 #define se_data_height 16 #define se_data_x_hot 15 #define se_data_y_hot 15 static const unsigned char se_data_bits[] = { 0x00, 0x00, 0x08, 0x00, 0x14, 0x00, 0x22, 0x08, 0x44, 0x08, 0x88, 0x14, 0x10, 0x13, 0x20, 0x12, 0x40, 0x20, 0xc0, 0x20, 0x20, 0x20, 0x18, 0x40, 0xe0, 0x40, 0x00, 0x47, 0x00, 0xb8, 0x00, 0xc0 }; #define sw_data_width 16 #define sw_data_height 16 #define sw_data_x_hot 0 #define sw_data_y_hot 15 static const unsigned char sw_data_bits[] = { 0x00, 0x00, 0x00, 0x10, 0x00, 0x28, 0x10, 0x44, 0x10, 0x22, 0x28, 0x11, 0xc8, 0x08, 0x48, 0x04, 0x04, 0x02, 0x04, 0x03, 0x04, 0x04, 0x02, 0x18, 0x02, 0x07, 0xe2, 0x00, 0x1d, 0x00, 0x03, 0x00 }; #define nw_data_x_hot 0 #define nw_data_y_hot 0 static const unsigned char nw_data_bits[] = { 0x03, 0x00, 0x1d, 0x00, 0xe2, 0x00, 0x02, 0x07, 0x02, 0x18, 0x04, 0x04, 0x04, 0x03, 0x04, 0x02, 0x48, 0x04, 0xc8, 0x08, 0x28, 0x11, 0x10, 0x22, 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; static const unsigned char nw_mask_bits[] = { 0x03, 0x00, 0x1f, 0x00, 0xfe, 0x00, 0xfe, 0x07, 0xfe, 0x1f, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x03, 0xf8, 0x07, 0xf8, 0x0f, 0x38, 0x1f, 0x10, 0x3e, 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; #define ne_mask_width 16 #define ne_mask_height 16 #define ne_mask_x_hot 15 #define ne_mask_y_hot 0 static const unsigned char ne_mask_bits[] = { 0x00, 0xc0, 0x00, 0xf8, 0x00, 0x7f, 0xe0, 0x7f, 0xf8, 0x7f, 0xe0, 0x3f, 0xc0, 0x3f, 0xc0, 0x3f, 0xe0, 0x1f, 0xf0, 0x1f, 0xf8, 0x1c, 0x7c, 0x08, 0x3e, 0x08, 0x1c, 0x00, 0x08, 0x00, 0x00, 0x00 }; #define se_mask_width 16 #define se_mask_height 16 #define se_mask_x_hot 15 #define se_mask_y_hot 15 static const unsigned char se_mask_bits[] = { 0x00, 0x00, 0x08, 0x00, 0x1c, 0x00, 0x3e, 0x08, 0x7c, 0x08, 0xf8, 0x1c, 0xf0, 0x1f, 0xe0, 0x1f, 0xc0, 0x3f, 0xc0, 0x3f, 0xe0, 0x3f, 0xf8, 0x7f, 0xe0, 0x7f, 0x00, 0x7f, 0x00, 0xf8, 0x00, 0xc0 }; #define sw_mask_width 16 #define sw_mask_height 16 #define sw_mask_x_hot 0 #define sw_mask_y_hot 15 static const unsigned char sw_mask_bits[] = { 0x00, 0x00, 0x00, 0x10, 0x00, 0x38, 0x10, 0x7c, 0x10, 0x3e, 0x38, 0x1f, 0xf8, 0x0f, 0xf8, 0x07, 0xfc, 0x03, 0xfc, 0x03, 0xfc, 0x07, 0xfe, 0x1f, 0xfe, 0x07, 0xfe, 0x00, 0x1f, 0x00, 0x03, 0x00 }; #define w_data_width 16 #define w_data_height 16 #define w_data_x_hot 0 #define w_data_y_hot 7 static const unsigned char w_data_bits[] = { 0x00, 0x00, 0x00, 0x18, 0x00, 0x0e, 0x80, 0x05, 0x60, 0x04, 0x18, 0x02, 0x06, 0xfe, 0x01, 0x80, 0x06, 0xfe, 0x18, 0x02, 0x60, 0x06, 0x80, 0x05, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00 }; #define w_mask_width 16 #define w_mask_height 16 #define w_mask_x_hot 0 #define w_mask_y_hot 7 static const unsigned char w_mask_bits[] = { 0x00, 0x00, 0x00, 0x18, 0x00, 0x0e, 0x80, 0x07, 0xe0, 0x07, 0xf8, 0x03, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xf8, 0x03, 0xe0, 0x07, 0x80, 0x07, 0x00, 0x0e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00 }; /* The angle between successive cursor intervals. */ const float cursor_interval = 360.0 / (float) n_CURSORS; static const unsigned char *cursors_data[n_CURSORS] = { s_data_bits, ssw_data_bits, sw_data_bits, wsw_data_bits, w_data_bits, wnw_data_bits, nw_data_bits, nnw_data_bits, n_data_bits, nne_data_bits, ne_data_bits, ene_data_bits, e_data_bits, ese_data_bits, se_data_bits, sse_data_bits, }; static const unsigned char *cursors_masks[n_CURSORS] = { s_mask_bits, ssw_mask_bits, sw_mask_bits, wsw_mask_bits, w_mask_bits, wnw_mask_bits, nw_mask_bits, nnw_mask_bits, n_mask_bits, nne_mask_bits, ne_mask_bits, ene_mask_bits, e_mask_bits, ese_mask_bits, se_mask_bits, sse_mask_bits, }; static const int cursors_hot_x[n_CURSORS] = { s_data_x_hot, ssw_data_x_hot, sw_data_x_hot, wsw_data_x_hot, w_data_x_hot, wnw_data_x_hot, nw_data_x_hot, nnw_data_x_hot, n_data_x_hot, nne_data_x_hot, ne_data_x_hot, ene_data_x_hot, e_data_x_hot, ese_data_x_hot, se_data_x_hot, sse_data_x_hot, }; static const int cursors_hot_y[n_CURSORS] = { s_data_y_hot, ssw_data_y_hot, sw_data_y_hot, wsw_data_y_hot, w_data_y_hot, wnw_data_y_hot, nw_data_y_hot, nnw_data_y_hot, n_data_y_hot, nne_data_y_hot, ne_data_y_hot, ene_data_y_hot, e_data_y_hot, ese_data_y_hot, se_data_y_hot, sse_data_y_hot, }; /* Get the cursor which matches the angle the closest */ void get_cursor (int index, const unsigned char **data, const unsigned char **mask, int *height, int *width, int *hot_x, int *hot_y, gboolean reverse) { *hot_y = cursors_hot_y[index]; *hot_x = cursors_hot_x[index]; if ( reverse ) index = index + 8; index = index % n_CURSORS; *data = cursors_data[index]; *mask = cursors_masks[index]; *height = 16; *width = 16; } gnubik-2.4.3/Makefile.in0000644000175000017460000026732713070437136012017 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (c) 2004 Dale Mellor # # This program 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 3 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, see . VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @cc_is_gcc_TRUE@am__append_1 = -Wall -Wwrite-strings \ @cc_is_gcc_TRUE@-Wpointer-arith -Wno-sign-compare -Wmissing-prototypes bin_PROGRAMS = src/gnubik$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(dist_script_DATA) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = po/Makefile CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" \ "$(DESTDIR)$(scriptdir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_src_gnubik_OBJECTS = src/src_gnubik-cube.$(OBJEXT) \ src/src_gnubik-cubeview.$(OBJEXT) \ src/src_gnubik-colour-dialog.$(OBJEXT) \ src/src_gnubik-control.$(OBJEXT) \ src/src_gnubik-cursors.$(OBJEXT) \ src/src_gnubik-dialogs.$(OBJEXT) \ src/src_gnubik-drwBlock.$(OBJEXT) \ src/src_gnubik-game.$(OBJEXT) \ src/src_gnubik-glarea-common.$(OBJEXT) \ src/src_gnubik-guile-hooks.$(OBJEXT) \ src/src_gnubik-main.$(OBJEXT) src/src_gnubik-menus.$(OBJEXT) \ src/src_gnubik-move.$(OBJEXT) \ src/src_gnubik-quarternion.$(OBJEXT) \ src/src_gnubik-select.$(OBJEXT) \ src/src_gnubik-swatch.$(OBJEXT) src/src_gnubik-txfm.$(OBJEXT) \ src/src_gnubik-textures.$(OBJEXT) \ src/src_gnubik-version.$(OBJEXT) src_gnubik_OBJECTS = $(am_src_gnubik_OBJECTS) am__DEPENDENCIES_1 = src_gnubik_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) src_gnubik_LINK = $(CCLD) $(src_gnubik_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(src_gnubik_SOURCES) DIST_SOURCES = $(src_gnubik_SOURCES) AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/doc/gnubik.info TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux DVIS = doc/gnubik.dvi PDFS = doc/gnubik.pdf PSS = doc/gnubik.ps HTMLS = doc/gnubik.html TEXINFOS = doc/gnubik.texinfo TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_script_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.rpath \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/missing \ $(top_srcdir)/build-aux/texinfo.tex \ $(top_srcdir)/doc/automake.mk $(top_srcdir)/icons/automake.mk \ $(top_srcdir)/po/Makefile.in $(top_srcdir)/po/automake.mk \ $(top_srcdir)/scripts/automake.mk \ $(top_srcdir)/src/automake.mk ABOUT-NLS AUTHORS COPYING \ ChangeLog INSTALL NEWS README THANKS TODO build-aux/compile \ build-aux/config.guess build-aux/config.rpath \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/missing build-aux/texinfo.tex DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GDK_GL_EXT_CFLAGS = @GDK_GL_EXT_CFLAGS@ GDK_GL_EXT_LIBS = @GDK_GL_EXT_LIBS@ GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLUT_CFLAGS = @GLUT_CFLAGS@ GLUT_LIBS = @GLUT_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GL_CFLAGS = @GL_CFLAGS@ GL_LIBS = @GL_LIBS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_GL_EXT_CFLAGS = @GTK_GL_EXT_CFLAGS@ GTK_GL_EXT_LIBS = @GTK_GL_EXT_LIBS@ GTK_LIBS = @GTK_LIBS@ GUILD = @GUILD@ GUILE = @GUILE@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_CONFIG = @GUILE_CONFIG@ GUILE_LIBS = @GUILE_LIBS@ GUILE_TOOLS = @GUILE_TOOLS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = msgfmt MSGFMT_015 = @MSGFMT_015@ MSGMERGE = msgmerge OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ XGETTEXT = xgettext XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = po AUTOMAKE_OPTIONS = gnits 1.11 subdir-objects SUFFIXES = .po .gmo ALL_LOCAL = $(GMOFILES) icons/gnubik.desktop CLEAN_LOCAL = po_CLEAN icondir = $(pkgdatadir)/icons AM_CPPFLAGS = -DLOCALEDIR=\"$(localedir)\" -DPKGICONDIR=\"$(icondir)\" \ -DGUILEDIR=\"$(pkgdatadir)\" \ -DSCRIPTDIR=\"$(pkgdatadir)/scripts\" AM_CFLAGS = $(am__append_1) src_gnubik_CPPFLAGS = $(AM_CPPFLAGS) src_gnubik_CFLAGS = $(AM_CFLAGS) \ $(GTK_CFLAGS) \ $(GL_CFLAGS) \ $(GLU_CFLAGS) \ $(GLUT_CFLAGS) \ $(GDK_GL_EXT_CFLAGS) \ $(GTK_GL_EXT_CFLAGS) \ $(GUILE_CFLAGS) \ -DGDK_MULTIHEAD_SAFE=1 \ -DGSEAL_ENABLE=1 src_gnubik_LDADD = $(GTK_LIBS) $(GDK_GL_EXT_LIBS) $(GTK_GL_EXT_LIBS) \ $(GL_LIBS) \ $(GLU_LIBS) \ $(GLUT_LIBS) \ $(GUILE_LIBS) src_gnubik_SOURCES = \ src/cube.c src/cube.h \ src/cube_i.h \ src/cubeview.c src/cubeview.h \ src/colour-dialog.c src/colour-dialog.h \ src/control.h src/control.c \ src/cursors.c src/cursors.h \ src/dialogs.c src/dialogs.h \ src/drwBlock.c src/drwBlock.h \ src/game.c src/game.h \ src/glarea-common.c \ src/glarea.h \ src/guile-hooks.c src/guile-hooks.h \ src/main.c \ src/menus.c src/menus.h \ src/move.c src/move.h \ src/quarternion.c src/quarternion.h \ src/select.c src/select.h \ src/swatch.c src/swatch.h \ src/txfm.c src/txfm.h \ src/textures.c src/textures.h \ src/version.c src/version.h scriptdir = ${pkgdatadir}/scripts initdir = ${pkgdatadir}/guile dist_script_DATA = \ scripts/debug.scm \ scripts/rand.scm \ scripts/flubrd.scm \ scripts/mellor-solve.scm info_TEXINFOS = doc/gnubik.texinfo EXTRA_DIST = doc/gnubik.6 doc/gnubik-rubric $(POFILES) $(POTFILE) \ icons/logo22.xcf icons/logo32.xcf icons/logo48.xcf \ icons/logo16.png icons/logo22.png icons/logo32.png \ icons/logo48.png icons/gen-dot-desktop.scm CLEANFILES = gnubik.dvi $(GMOFILES) $(POTFILE) icons/gnubik.desktop DOMAIN = $(PACKAGE) MSGID_BUGS_ADDRESS = $(PACKAGE_BUGREPORT) POFILES = \ po/ar.po \ po/bg.po \ po/ca.po \ po/da.po \ po/de.po \ po/el.po \ po/en_US.po \ po/eo.po \ po/es.po \ po/eu.po \ po/fi.po \ po/fr.po \ po/gl.po \ po/he.po \ po/hr.po \ po/it.po \ po/ms.po \ po/nb.po \ po/nl.po \ po/pl.po \ po/pt_BR.po \ po/pt.po \ po/tr.po \ po/uk.po \ po/ro.po \ po/ru.po \ po/sl.po \ po/sr.po \ po/sv.po \ po/vi.po \ po/zh_CN.po POTFILE = po/$(DOMAIN).pot COPYRIGHT_HOLDER = John Darrington XGETTEXT_OPTIONS = \ --copyright-holder="$(COPYRIGHT_HOLDER)" \ --package-name=$(PACKAGE) \ --package-version=$(VERSION) \ --msgid-bugs-address=$(MSGID_BUGS_ADDRESS) \ --from-code=UTF-8 \ --add-comments='TRANSLATORS:' GMOFILES = $(POFILES:.po=.gmo) themedir = $(DESTDIR)$(datadir)/icons/hicolor context = apps sizes = 16 22 24 32 48 desktopdir = $(DESTDIR)$(datadir)/applications INSTALL_DATA_HOOKS = install-icons install-desktop UNINSTALL_DATA_HOOKS = uninstall-icons uninstall-desktop ACLOCAL_AMFLAGS = -I m4 all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .po .gmo .c .dvi .o .obj .ps am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/src/automake.mk $(top_srcdir)/scripts/automake.mk $(top_srcdir)/doc/automake.mk $(top_srcdir)/po/automake.mk $(top_srcdir)/icons/automake.mk $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnits'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnits \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/src/automake.mk $(top_srcdir)/scripts/automake.mk $(top_srcdir)/doc/automake.mk $(top_srcdir)/po/automake.mk $(top_srcdir)/icons/automake.mk $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 po/Makefile: $(top_builddir)/config.status $(top_srcdir)/po/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) installcheck-binPROGRAMS: $(bin_PROGRAMS) bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | \ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad src/$(am__dirstamp): @$(MKDIR_P) src @: > src/$(am__dirstamp) src/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) src/$(DEPDIR) @: > src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-cube.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-cubeview.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-colour-dialog.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-control.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-cursors.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-dialogs.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-drwBlock.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-game.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-glarea-common.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-guile-hooks.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-main.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-menus.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-move.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-quarternion.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-select.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-swatch.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-txfm.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-textures.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/src_gnubik-version.$(OBJEXT): src/$(am__dirstamp) \ src/$(DEPDIR)/$(am__dirstamp) src/gnubik$(EXEEXT): $(src_gnubik_OBJECTS) $(src_gnubik_DEPENDENCIES) $(EXTRA_src_gnubik_DEPENDENCIES) src/$(am__dirstamp) @rm -f src/gnubik$(EXEEXT) $(AM_V_CCLD)$(src_gnubik_LINK) $(src_gnubik_OBJECTS) $(src_gnubik_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f src/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-colour-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-control.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-cube.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-cubeview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-cursors.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-dialogs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-drwBlock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-game.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-glarea-common.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-guile-hooks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-menus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-move.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-quarternion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-select.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-swatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-textures.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-txfm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@src/$(DEPDIR)/src_gnubik-version.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` src/src_gnubik-cube.o: src/cube.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-cube.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-cube.Tpo -c -o src/src_gnubik-cube.o `test -f 'src/cube.c' || echo '$(srcdir)/'`src/cube.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-cube.Tpo src/$(DEPDIR)/src_gnubik-cube.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/cube.c' object='src/src_gnubik-cube.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-cube.o `test -f 'src/cube.c' || echo '$(srcdir)/'`src/cube.c src/src_gnubik-cube.obj: src/cube.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-cube.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-cube.Tpo -c -o src/src_gnubik-cube.obj `if test -f 'src/cube.c'; then $(CYGPATH_W) 'src/cube.c'; else $(CYGPATH_W) '$(srcdir)/src/cube.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-cube.Tpo src/$(DEPDIR)/src_gnubik-cube.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/cube.c' object='src/src_gnubik-cube.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-cube.obj `if test -f 'src/cube.c'; then $(CYGPATH_W) 'src/cube.c'; else $(CYGPATH_W) '$(srcdir)/src/cube.c'; fi` src/src_gnubik-cubeview.o: src/cubeview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-cubeview.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-cubeview.Tpo -c -o src/src_gnubik-cubeview.o `test -f 'src/cubeview.c' || echo '$(srcdir)/'`src/cubeview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-cubeview.Tpo src/$(DEPDIR)/src_gnubik-cubeview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/cubeview.c' object='src/src_gnubik-cubeview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-cubeview.o `test -f 'src/cubeview.c' || echo '$(srcdir)/'`src/cubeview.c src/src_gnubik-cubeview.obj: src/cubeview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-cubeview.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-cubeview.Tpo -c -o src/src_gnubik-cubeview.obj `if test -f 'src/cubeview.c'; then $(CYGPATH_W) 'src/cubeview.c'; else $(CYGPATH_W) '$(srcdir)/src/cubeview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-cubeview.Tpo src/$(DEPDIR)/src_gnubik-cubeview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/cubeview.c' object='src/src_gnubik-cubeview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-cubeview.obj `if test -f 'src/cubeview.c'; then $(CYGPATH_W) 'src/cubeview.c'; else $(CYGPATH_W) '$(srcdir)/src/cubeview.c'; fi` src/src_gnubik-colour-dialog.o: src/colour-dialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-colour-dialog.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-colour-dialog.Tpo -c -o src/src_gnubik-colour-dialog.o `test -f 'src/colour-dialog.c' || echo '$(srcdir)/'`src/colour-dialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-colour-dialog.Tpo src/$(DEPDIR)/src_gnubik-colour-dialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/colour-dialog.c' object='src/src_gnubik-colour-dialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-colour-dialog.o `test -f 'src/colour-dialog.c' || echo '$(srcdir)/'`src/colour-dialog.c src/src_gnubik-colour-dialog.obj: src/colour-dialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-colour-dialog.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-colour-dialog.Tpo -c -o src/src_gnubik-colour-dialog.obj `if test -f 'src/colour-dialog.c'; then $(CYGPATH_W) 'src/colour-dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/colour-dialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-colour-dialog.Tpo src/$(DEPDIR)/src_gnubik-colour-dialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/colour-dialog.c' object='src/src_gnubik-colour-dialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-colour-dialog.obj `if test -f 'src/colour-dialog.c'; then $(CYGPATH_W) 'src/colour-dialog.c'; else $(CYGPATH_W) '$(srcdir)/src/colour-dialog.c'; fi` src/src_gnubik-control.o: src/control.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-control.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-control.Tpo -c -o src/src_gnubik-control.o `test -f 'src/control.c' || echo '$(srcdir)/'`src/control.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-control.Tpo src/$(DEPDIR)/src_gnubik-control.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/control.c' object='src/src_gnubik-control.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-control.o `test -f 'src/control.c' || echo '$(srcdir)/'`src/control.c src/src_gnubik-control.obj: src/control.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-control.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-control.Tpo -c -o src/src_gnubik-control.obj `if test -f 'src/control.c'; then $(CYGPATH_W) 'src/control.c'; else $(CYGPATH_W) '$(srcdir)/src/control.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-control.Tpo src/$(DEPDIR)/src_gnubik-control.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/control.c' object='src/src_gnubik-control.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-control.obj `if test -f 'src/control.c'; then $(CYGPATH_W) 'src/control.c'; else $(CYGPATH_W) '$(srcdir)/src/control.c'; fi` src/src_gnubik-cursors.o: src/cursors.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-cursors.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-cursors.Tpo -c -o src/src_gnubik-cursors.o `test -f 'src/cursors.c' || echo '$(srcdir)/'`src/cursors.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-cursors.Tpo src/$(DEPDIR)/src_gnubik-cursors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/cursors.c' object='src/src_gnubik-cursors.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-cursors.o `test -f 'src/cursors.c' || echo '$(srcdir)/'`src/cursors.c src/src_gnubik-cursors.obj: src/cursors.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-cursors.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-cursors.Tpo -c -o src/src_gnubik-cursors.obj `if test -f 'src/cursors.c'; then $(CYGPATH_W) 'src/cursors.c'; else $(CYGPATH_W) '$(srcdir)/src/cursors.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-cursors.Tpo src/$(DEPDIR)/src_gnubik-cursors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/cursors.c' object='src/src_gnubik-cursors.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-cursors.obj `if test -f 'src/cursors.c'; then $(CYGPATH_W) 'src/cursors.c'; else $(CYGPATH_W) '$(srcdir)/src/cursors.c'; fi` src/src_gnubik-dialogs.o: src/dialogs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-dialogs.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-dialogs.Tpo -c -o src/src_gnubik-dialogs.o `test -f 'src/dialogs.c' || echo '$(srcdir)/'`src/dialogs.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-dialogs.Tpo src/$(DEPDIR)/src_gnubik-dialogs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/dialogs.c' object='src/src_gnubik-dialogs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-dialogs.o `test -f 'src/dialogs.c' || echo '$(srcdir)/'`src/dialogs.c src/src_gnubik-dialogs.obj: src/dialogs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-dialogs.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-dialogs.Tpo -c -o src/src_gnubik-dialogs.obj `if test -f 'src/dialogs.c'; then $(CYGPATH_W) 'src/dialogs.c'; else $(CYGPATH_W) '$(srcdir)/src/dialogs.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-dialogs.Tpo src/$(DEPDIR)/src_gnubik-dialogs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/dialogs.c' object='src/src_gnubik-dialogs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-dialogs.obj `if test -f 'src/dialogs.c'; then $(CYGPATH_W) 'src/dialogs.c'; else $(CYGPATH_W) '$(srcdir)/src/dialogs.c'; fi` src/src_gnubik-drwBlock.o: src/drwBlock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-drwBlock.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-drwBlock.Tpo -c -o src/src_gnubik-drwBlock.o `test -f 'src/drwBlock.c' || echo '$(srcdir)/'`src/drwBlock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-drwBlock.Tpo src/$(DEPDIR)/src_gnubik-drwBlock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/drwBlock.c' object='src/src_gnubik-drwBlock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-drwBlock.o `test -f 'src/drwBlock.c' || echo '$(srcdir)/'`src/drwBlock.c src/src_gnubik-drwBlock.obj: src/drwBlock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-drwBlock.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-drwBlock.Tpo -c -o src/src_gnubik-drwBlock.obj `if test -f 'src/drwBlock.c'; then $(CYGPATH_W) 'src/drwBlock.c'; else $(CYGPATH_W) '$(srcdir)/src/drwBlock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-drwBlock.Tpo src/$(DEPDIR)/src_gnubik-drwBlock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/drwBlock.c' object='src/src_gnubik-drwBlock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-drwBlock.obj `if test -f 'src/drwBlock.c'; then $(CYGPATH_W) 'src/drwBlock.c'; else $(CYGPATH_W) '$(srcdir)/src/drwBlock.c'; fi` src/src_gnubik-game.o: src/game.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-game.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-game.Tpo -c -o src/src_gnubik-game.o `test -f 'src/game.c' || echo '$(srcdir)/'`src/game.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-game.Tpo src/$(DEPDIR)/src_gnubik-game.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/game.c' object='src/src_gnubik-game.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-game.o `test -f 'src/game.c' || echo '$(srcdir)/'`src/game.c src/src_gnubik-game.obj: src/game.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-game.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-game.Tpo -c -o src/src_gnubik-game.obj `if test -f 'src/game.c'; then $(CYGPATH_W) 'src/game.c'; else $(CYGPATH_W) '$(srcdir)/src/game.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-game.Tpo src/$(DEPDIR)/src_gnubik-game.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/game.c' object='src/src_gnubik-game.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-game.obj `if test -f 'src/game.c'; then $(CYGPATH_W) 'src/game.c'; else $(CYGPATH_W) '$(srcdir)/src/game.c'; fi` src/src_gnubik-glarea-common.o: src/glarea-common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-glarea-common.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-glarea-common.Tpo -c -o src/src_gnubik-glarea-common.o `test -f 'src/glarea-common.c' || echo '$(srcdir)/'`src/glarea-common.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-glarea-common.Tpo src/$(DEPDIR)/src_gnubik-glarea-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/glarea-common.c' object='src/src_gnubik-glarea-common.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-glarea-common.o `test -f 'src/glarea-common.c' || echo '$(srcdir)/'`src/glarea-common.c src/src_gnubik-glarea-common.obj: src/glarea-common.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-glarea-common.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-glarea-common.Tpo -c -o src/src_gnubik-glarea-common.obj `if test -f 'src/glarea-common.c'; then $(CYGPATH_W) 'src/glarea-common.c'; else $(CYGPATH_W) '$(srcdir)/src/glarea-common.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-glarea-common.Tpo src/$(DEPDIR)/src_gnubik-glarea-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/glarea-common.c' object='src/src_gnubik-glarea-common.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-glarea-common.obj `if test -f 'src/glarea-common.c'; then $(CYGPATH_W) 'src/glarea-common.c'; else $(CYGPATH_W) '$(srcdir)/src/glarea-common.c'; fi` src/src_gnubik-guile-hooks.o: src/guile-hooks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-guile-hooks.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-guile-hooks.Tpo -c -o src/src_gnubik-guile-hooks.o `test -f 'src/guile-hooks.c' || echo '$(srcdir)/'`src/guile-hooks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-guile-hooks.Tpo src/$(DEPDIR)/src_gnubik-guile-hooks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/guile-hooks.c' object='src/src_gnubik-guile-hooks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-guile-hooks.o `test -f 'src/guile-hooks.c' || echo '$(srcdir)/'`src/guile-hooks.c src/src_gnubik-guile-hooks.obj: src/guile-hooks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-guile-hooks.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-guile-hooks.Tpo -c -o src/src_gnubik-guile-hooks.obj `if test -f 'src/guile-hooks.c'; then $(CYGPATH_W) 'src/guile-hooks.c'; else $(CYGPATH_W) '$(srcdir)/src/guile-hooks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-guile-hooks.Tpo src/$(DEPDIR)/src_gnubik-guile-hooks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/guile-hooks.c' object='src/src_gnubik-guile-hooks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-guile-hooks.obj `if test -f 'src/guile-hooks.c'; then $(CYGPATH_W) 'src/guile-hooks.c'; else $(CYGPATH_W) '$(srcdir)/src/guile-hooks.c'; fi` src/src_gnubik-main.o: src/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-main.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-main.Tpo -c -o src/src_gnubik-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-main.Tpo src/$(DEPDIR)/src_gnubik-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/main.c' object='src/src_gnubik-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-main.o `test -f 'src/main.c' || echo '$(srcdir)/'`src/main.c src/src_gnubik-main.obj: src/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-main.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-main.Tpo -c -o src/src_gnubik-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-main.Tpo src/$(DEPDIR)/src_gnubik-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/main.c' object='src/src_gnubik-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-main.obj `if test -f 'src/main.c'; then $(CYGPATH_W) 'src/main.c'; else $(CYGPATH_W) '$(srcdir)/src/main.c'; fi` src/src_gnubik-menus.o: src/menus.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-menus.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-menus.Tpo -c -o src/src_gnubik-menus.o `test -f 'src/menus.c' || echo '$(srcdir)/'`src/menus.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-menus.Tpo src/$(DEPDIR)/src_gnubik-menus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/menus.c' object='src/src_gnubik-menus.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-menus.o `test -f 'src/menus.c' || echo '$(srcdir)/'`src/menus.c src/src_gnubik-menus.obj: src/menus.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-menus.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-menus.Tpo -c -o src/src_gnubik-menus.obj `if test -f 'src/menus.c'; then $(CYGPATH_W) 'src/menus.c'; else $(CYGPATH_W) '$(srcdir)/src/menus.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-menus.Tpo src/$(DEPDIR)/src_gnubik-menus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/menus.c' object='src/src_gnubik-menus.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-menus.obj `if test -f 'src/menus.c'; then $(CYGPATH_W) 'src/menus.c'; else $(CYGPATH_W) '$(srcdir)/src/menus.c'; fi` src/src_gnubik-move.o: src/move.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-move.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-move.Tpo -c -o src/src_gnubik-move.o `test -f 'src/move.c' || echo '$(srcdir)/'`src/move.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-move.Tpo src/$(DEPDIR)/src_gnubik-move.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/move.c' object='src/src_gnubik-move.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-move.o `test -f 'src/move.c' || echo '$(srcdir)/'`src/move.c src/src_gnubik-move.obj: src/move.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-move.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-move.Tpo -c -o src/src_gnubik-move.obj `if test -f 'src/move.c'; then $(CYGPATH_W) 'src/move.c'; else $(CYGPATH_W) '$(srcdir)/src/move.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-move.Tpo src/$(DEPDIR)/src_gnubik-move.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/move.c' object='src/src_gnubik-move.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-move.obj `if test -f 'src/move.c'; then $(CYGPATH_W) 'src/move.c'; else $(CYGPATH_W) '$(srcdir)/src/move.c'; fi` src/src_gnubik-quarternion.o: src/quarternion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-quarternion.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-quarternion.Tpo -c -o src/src_gnubik-quarternion.o `test -f 'src/quarternion.c' || echo '$(srcdir)/'`src/quarternion.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-quarternion.Tpo src/$(DEPDIR)/src_gnubik-quarternion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/quarternion.c' object='src/src_gnubik-quarternion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-quarternion.o `test -f 'src/quarternion.c' || echo '$(srcdir)/'`src/quarternion.c src/src_gnubik-quarternion.obj: src/quarternion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-quarternion.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-quarternion.Tpo -c -o src/src_gnubik-quarternion.obj `if test -f 'src/quarternion.c'; then $(CYGPATH_W) 'src/quarternion.c'; else $(CYGPATH_W) '$(srcdir)/src/quarternion.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-quarternion.Tpo src/$(DEPDIR)/src_gnubik-quarternion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/quarternion.c' object='src/src_gnubik-quarternion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-quarternion.obj `if test -f 'src/quarternion.c'; then $(CYGPATH_W) 'src/quarternion.c'; else $(CYGPATH_W) '$(srcdir)/src/quarternion.c'; fi` src/src_gnubik-select.o: src/select.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-select.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-select.Tpo -c -o src/src_gnubik-select.o `test -f 'src/select.c' || echo '$(srcdir)/'`src/select.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-select.Tpo src/$(DEPDIR)/src_gnubik-select.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/select.c' object='src/src_gnubik-select.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-select.o `test -f 'src/select.c' || echo '$(srcdir)/'`src/select.c src/src_gnubik-select.obj: src/select.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-select.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-select.Tpo -c -o src/src_gnubik-select.obj `if test -f 'src/select.c'; then $(CYGPATH_W) 'src/select.c'; else $(CYGPATH_W) '$(srcdir)/src/select.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-select.Tpo src/$(DEPDIR)/src_gnubik-select.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/select.c' object='src/src_gnubik-select.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-select.obj `if test -f 'src/select.c'; then $(CYGPATH_W) 'src/select.c'; else $(CYGPATH_W) '$(srcdir)/src/select.c'; fi` src/src_gnubik-swatch.o: src/swatch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-swatch.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-swatch.Tpo -c -o src/src_gnubik-swatch.o `test -f 'src/swatch.c' || echo '$(srcdir)/'`src/swatch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-swatch.Tpo src/$(DEPDIR)/src_gnubik-swatch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/swatch.c' object='src/src_gnubik-swatch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-swatch.o `test -f 'src/swatch.c' || echo '$(srcdir)/'`src/swatch.c src/src_gnubik-swatch.obj: src/swatch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-swatch.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-swatch.Tpo -c -o src/src_gnubik-swatch.obj `if test -f 'src/swatch.c'; then $(CYGPATH_W) 'src/swatch.c'; else $(CYGPATH_W) '$(srcdir)/src/swatch.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-swatch.Tpo src/$(DEPDIR)/src_gnubik-swatch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/swatch.c' object='src/src_gnubik-swatch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-swatch.obj `if test -f 'src/swatch.c'; then $(CYGPATH_W) 'src/swatch.c'; else $(CYGPATH_W) '$(srcdir)/src/swatch.c'; fi` src/src_gnubik-txfm.o: src/txfm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-txfm.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-txfm.Tpo -c -o src/src_gnubik-txfm.o `test -f 'src/txfm.c' || echo '$(srcdir)/'`src/txfm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-txfm.Tpo src/$(DEPDIR)/src_gnubik-txfm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/txfm.c' object='src/src_gnubik-txfm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-txfm.o `test -f 'src/txfm.c' || echo '$(srcdir)/'`src/txfm.c src/src_gnubik-txfm.obj: src/txfm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-txfm.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-txfm.Tpo -c -o src/src_gnubik-txfm.obj `if test -f 'src/txfm.c'; then $(CYGPATH_W) 'src/txfm.c'; else $(CYGPATH_W) '$(srcdir)/src/txfm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-txfm.Tpo src/$(DEPDIR)/src_gnubik-txfm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/txfm.c' object='src/src_gnubik-txfm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-txfm.obj `if test -f 'src/txfm.c'; then $(CYGPATH_W) 'src/txfm.c'; else $(CYGPATH_W) '$(srcdir)/src/txfm.c'; fi` src/src_gnubik-textures.o: src/textures.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-textures.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-textures.Tpo -c -o src/src_gnubik-textures.o `test -f 'src/textures.c' || echo '$(srcdir)/'`src/textures.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-textures.Tpo src/$(DEPDIR)/src_gnubik-textures.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/textures.c' object='src/src_gnubik-textures.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-textures.o `test -f 'src/textures.c' || echo '$(srcdir)/'`src/textures.c src/src_gnubik-textures.obj: src/textures.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-textures.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-textures.Tpo -c -o src/src_gnubik-textures.obj `if test -f 'src/textures.c'; then $(CYGPATH_W) 'src/textures.c'; else $(CYGPATH_W) '$(srcdir)/src/textures.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-textures.Tpo src/$(DEPDIR)/src_gnubik-textures.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/textures.c' object='src/src_gnubik-textures.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-textures.obj `if test -f 'src/textures.c'; then $(CYGPATH_W) 'src/textures.c'; else $(CYGPATH_W) '$(srcdir)/src/textures.c'; fi` src/src_gnubik-version.o: src/version.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-version.o -MD -MP -MF src/$(DEPDIR)/src_gnubik-version.Tpo -c -o src/src_gnubik-version.o `test -f 'src/version.c' || echo '$(srcdir)/'`src/version.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-version.Tpo src/$(DEPDIR)/src_gnubik-version.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/version.c' object='src/src_gnubik-version.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-version.o `test -f 'src/version.c' || echo '$(srcdir)/'`src/version.c src/src_gnubik-version.obj: src/version.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -MT src/src_gnubik-version.obj -MD -MP -MF src/$(DEPDIR)/src_gnubik-version.Tpo -c -o src/src_gnubik-version.obj `if test -f 'src/version.c'; then $(CYGPATH_W) 'src/version.c'; else $(CYGPATH_W) '$(srcdir)/src/version.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) src/$(DEPDIR)/src_gnubik-version.Tpo src/$(DEPDIR)/src_gnubik-version.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/version.c' object='src/src_gnubik-version.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(src_gnubik_CPPFLAGS) $(CPPFLAGS) $(src_gnubik_CFLAGS) $(CFLAGS) -c -o src/src_gnubik-version.obj `if test -f 'src/version.c'; then $(CYGPATH_W) 'src/version.c'; else $(CYGPATH_W) '$(srcdir)/src/version.c'; fi` doc/$(am__dirstamp): @$(MKDIR_P) doc @: > doc/$(am__dirstamp) $(srcdir)/doc/gnubik.info: doc/gnubik.texinfo $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ -o $@ $(srcdir)/doc/gnubik.texinfo; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc doc/gnubik.dvi: doc/gnubik.texinfo doc/$(am__dirstamp) $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ `test -f 'doc/gnubik.texinfo' || echo '$(srcdir)/'`doc/gnubik.texinfo doc/gnubik.pdf: doc/gnubik.texinfo doc/$(am__dirstamp) $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ `test -f 'doc/gnubik.texinfo' || echo '$(srcdir)/'`doc/gnubik.texinfo doc/gnubik.html: doc/gnubik.texinfo doc/$(am__dirstamp) $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ -o $(@:.html=.htp) `test -f 'doc/gnubik.texinfo' || echo '$(srcdir)/'`doc/gnubik.texinfo; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf doc/gnubik.t2d doc/gnubik.t2p clean-aminfo: -test -z "doc/gnubik.dvi doc/gnubik.pdf doc/gnubik.ps doc/gnubik.html" \ || rm -rf doc/gnubik.dvi doc/gnubik.pdf doc/gnubik.ps doc/gnubik.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-dist_scriptDATA: $(dist_script_DATA) @$(NORMAL_INSTALL) @list='$(dist_script_DATA)'; test -n "$(scriptdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(scriptdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(scriptdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(scriptdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(scriptdir)" || exit $$?; \ done uninstall-dist_scriptDATA: @$(NORMAL_UNINSTALL) @list='$(dist_script_DATA)'; test -n "$(scriptdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(scriptdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) @case `sed 15q $(srcdir)/NEWS` in \ *"$(VERSION)"*) : ;; \ *) \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1;; \ esac $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(DATA) config.h all-local installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(scriptdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f doc/$(am__dirstamp) -rm -f src/$(DEPDIR)/$(am__dirstamp) -rm -f src/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-aminfo clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf src/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: $(DVIS) html: html-recursive html-am: $(HTMLS) info: info-recursive info-am: $(INFO_DEPS) install-data-am: install-dist_scriptDATA install-info-am @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-pdf: install-pdf-recursive install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: installcheck-binPROGRAMS maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf src/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ mostlyclean-generic pdf: pdf-recursive pdf-am: $(PDFS) ps: ps-recursive ps-am: $(PSS) uninstall-am: uninstall-binPROGRAMS uninstall-dist_scriptDATA \ uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-pdf-am uninstall-ps-am @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(am__recursive_targets) all install-am install-data-am \ install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \ am--refresh check check-am clean clean-aminfo \ clean-binPROGRAMS clean-cscope clean-generic cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-info dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-binPROGRAMS install-data \ install-data-am install-data-hook install-dist_scriptDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installcheck-binPROGRAMS installdirs installdirs-am \ maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean mostlyclean-aminfo \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-dist_scriptDATA uninstall-dvi-am uninstall-hook \ uninstall-html-am uninstall-info-am uninstall-pdf-am \ uninstall-ps-am .PRECIOUS: Makefile $(POTFILE): $(DIST_SOURCES) $(dist_script_DATA) $(desktop_DATA) @$(MKDIR_P) po $(XGETTEXT) --directory=$(top_srcdir) $(XGETTEXT_OPTIONS) $(DIST_SOURCES) --language=C --keyword=_ --keyword=N_ -o $@ $(XGETTEXT) --directory=$(top_srcdir) $(XGETTEXT_OPTIONS) $(dist_script_DATA) $(desktop_DATA) --language=scheme --keyword=_ --keyword=N_ -j -o $@ $(SED) -e '/POT-Creation-Date: /d' $@ > $@,tmp mv $@,tmp $@ $(POFILES): $(POTFILE) $(MSGMERGE) $(top_srcdir)/$@ $? -o $@ .po.gmo: @$(MKDIR_P) `dirname $@` $(MSGFMT) $< -o $@ install-data-hook: $(GMOFILES) for f in $(GMOFILES); do \ lang=`echo $$f | $(SED) -e 's%po/\(.*\)\.gmo%\1%' ` ; \ $(MKDIR_P) $(DESTDIR)$(prefix)/share/locale/$$lang/LC_MESSAGES; \ $(INSTALL_DATA) $$f $(DESTDIR)$(prefix)/share/locale/$$lang/LC_MESSAGES/$(DOMAIN).mo ; \ done uninstall-hook: for f in $(GMOFILES); do \ lang=`echo $$f | $(SED) -e 's%po/\(.*\)\.gmo%\1%' ` ; \ rm -f $(DESTDIR)$(prefix)/share/locale/$$lang/LC_MESSAGES/$(DOMAIN).mo ; \ done # Clean $(POFILES) from build directory but not if that's the same as # the source directory. .PHONY: po_CLEAN po_CLEAN: @if test "$(srcdir)" != .; then \ echo rm -f $(POFILES); \ rm -f $(POFILES); \ fi install-icons: for size in $(sizes); do \ $(MKDIR_P) $(themedir)/$${size}x$${size}/$(context) ; \ $(INSTALL_DATA) $(top_srcdir)/icons/logo$$size.png $(themedir)/$${size}x$${size}/$(context)/gnubik.png ; \ done if test -z $(DESTDIR) ; then \ gtk-update-icon-cache --ignore-theme-index $(themedir) ; \ fi uninstall-icons: for size in $(sizes); do \ $(RM) $(themedir)/$${size}x$${size}/$(context)/gnubik.png ; \ done gtk-update-icon-cache --ignore-theme-index $(themedir) install-desktop: $(MKDIR_P) $(desktopdir) chmod u+w $(desktopdir) $(INSTALL_DATA) $(top_builddir)/icons/gnubik.desktop $(desktopdir)/gnubik.desktop uninstall-desktop: $(RM) $(desktopdir)/gnubik.desktop install-data-hook: $(INSTALL_DATA_HOOKS) uninstall-hook: $(UNINSTALL_DATA_HOOKS) icons/gnubik.desktop: icons/gen-dot-desktop.scm $(POFILES) $(MKDIR_P) `dirname $@` $(GUILE) $< `echo $(POFILES) | $(SED) -e 's%po/%'$(srcdir)'/po/%g'` > $@,tmp mv $@,tmp $@ all-local: $(ALL_LOCAL) $(PACKAGE)-$(VERSION).tar.gz.directive: $(PACKAGE)-$(VERSION).tar.gz echo version: 1.1 > $@ echo directory: gnubik >> $@ echo filename: $< >> $@ $(PACKAGE)-$(VERSION).tar.gz.directive.asc: $(PACKAGE)-$(VERSION).tar.gz.directive gpg --clearsign $< $(PACKAGE)-$(VERSION).tar.gz.sig: $(PACKAGE)-$(VERSION).tar.gz gpg -b $< .PHONY: release release: distcheck $(PACKAGE)-$(VERSION).tar.gz.directive.asc $(PACKAGE)-$(VERSION).tar.gz.sig # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnubik-2.4.3/ChangeLog0000644000175000017460000007365213070436202011511 000000000000002017-03-27 John Darrington Fix typo in string. Reported-by: Abdorhman Ayman 2016-03-06 John Darrington Remove the POT-Creation-Date header from the gnubik.pot file This helps to make the build bit-for-bit reproducible. Makefiles: replace sed with $(SED) Use new GDK_KEY_ symbols Avoid the deprecated GtkObject Autotools: update to version 1.14 2015-11-14 John Darrington Update translations from tp 2015-07-12 John Darrington Conditionally set clip_volume_hint. Do not set clip_volume_hint, if the clip_volume extension isn't available. 2015-07-11 John Darrington Avoid single includes Gseal enable recent to Gtk+-2.24 2015-05-16 John Darrington Do not install gen-dot-desktop.scm Reported-by: Kyrill Detinov 2015-05-13 John Darrington Ensure that make install works when DESTDIR is set. make install DESTDIR=/tmp/xxx failed due to a missing DESTDIR in the makefile. This change fixes the problem. Reported-by: Kyrill Detinov 2015-05-06 John Darrington Prepare for Release of 2.4.2 2015-05-02 John Darrington Updated Danish localisation 2015-04-16 John Darrington Added some new translator comments New finnish translation Call setlocale in rand.scm Otherwise format-simple fails under non-ascii strings New translation: ar.po 2015-04-12 John Darrington Make .desktop file depend on POFILES Updated translations from translationproject.org 2015-04-10 John Darrington Pre-release for 2.4.2 2015-04-09 John Darrington Use PACKAGE NAME for titlebars and about dialog box 2015-04-05 John Darrington Fix typo in ChangeLog.OLD Updated French translation from translationproject.org Internalitionalise the rand-menu items Generate the .desktop file including translations The .desktop file may include translations of the Comment and GenericName fields. This change does 2 things: 1. It adds the Comment and GenericName fields to the gnubik.pot file 2. It uses generates the .desktop using translated fields of the .po files. 2015-03-25 John Darrington Remove unused variable Updated the French localisation from translationproject.org 2014-05-11 John Darrington Added a galacian translation from translationproject.org 2014-04-23 John Darrington Updated nb localisation from tp 2014-04-17 John Darrington Avoid compiler warnings on certain GCC versions. Some systems complain if g_warning has only one argument. Thanks to Shlomi Fish for this patch. 2013-10-31 John Darrington updated pt_BR translation from TP 2013-06-05 John Darrington Added a Vietnamese translation from TP 2013-05-30 John Darrington Release 2.4.1 Change automake options to match desired new version Replace the m4 directory with an empty one. Commit ecd5e74e4683c75fbfe5d029a8ddc29c78b946b9 removed the m4 directory entirely. However, it seems that auto{conf,make} likes to have one. This change therefore puts it back although it is empty. Developer readme: update known working versions Correct INSTALL file regarding required Gtk version Removed pre-build m4 dependencies which are no longer relevant Removed variable which was set, but never used 2012-12-04 John Darrington Updated Italian translation from TPO 2012-04-16 John Darrington Don't ship icon-cache on package builds Update translations from TP 2012-01-14 John Darrington Use home grown instead of third party macros for OpenGL detection For political reasons, the GL/GLu detection macros have been removed from the autoconf archive. Therefore we must do without them. 2012-01-08 John Darrington Update translations from TP 2011-05-21 John Darrington Update translations from TP Replace deprecated guile macro. Thanks to Carter Young for reporting this problem. 2011-04-09 John Darrington Release version 2.4 Update translations from TP Allow autogen.mak to specify the version of automake 2011-04-07 John Darrington Remove some unused functions and update copyright dates Avoid compiler warnings and add comments where appropriate 2011-04-06 John Darrington Add rules to assist with ftp-upload Update translations from TP 2011-03-19 John Darrington Updated meta files Remove fast randomisation which is superfluous Updated documentation 2011-03-18 John Darrington Move in the opposite direction when the shift button is held down 2011-03-13 John Darrington Update en_US translation Add fi.po which hadn't been pulled from TP for some reason Whitespace changes only Refix mark feature Fix solver Update translations from TP Fix fundamental issues with the move queue 2011-03-12 John Darrington Fixed crash when selection fails Constness Make the target the first variable Reorganise the signatures of some txfm functions Rename functions for consistency Fix solver's appending to run queue Rename most_recent -> end_of_moves Remove unused code Reverse the meaning of game_at_start/game_at_end Rename some functions for consistency's sake Rename the print/dump functions Rename some identifiers to make them more meaningfull 2011-03-09 John Darrington Set message in statusbar when a mark is set Updated NEWS file 2011-03-08 John Darrington Re-enable mark button 2011-03-07 John Darrington Fix the state detection function Replaced free with g_free where appropriate Replaced malloc with g_malloc Updated NEWS file 2011-03-06 John Darrington Fixed (at least partially) the gbk_cube_get_status function Display the cube state in statusbar Gettext must return UTF8 encoded strings. Not the encoding of the locale 2011-02-26 John Darrington Added missing config.h include 2011-02-25 John Darrington Fix memory leak Fix crash after closing auxilliary view Properly deal with plural form message Adjust limit and message associated with animation rate Re-enable animation lock, as it seems to be necessary after all 2011-02-24 John Darrington Remove unused code Tolerate building against guile-2.0 Added a statusbar message to indicate when animation rate has been changed Make auxialliary views clones of the master Made the animation speed user configurable Rename widget-set to menus Remove toolbar visibility remnants 2011-02-23 John Darrington Re-enable dump for NxNxN cubes Remove static variable Added Slovenian translation from TP Update meta-information Removed some deprecated macros Force a selection update when the mouse button is clicked 2011-02-22 John Darrington Support dragNdrop of files from nautilus \&c Add drag sink to accept colours on swatch Remove timeout on finalisation Move code from previous commit to signal handler, so that rotations from signals do not get overlooked Disable anti-aliasing while rotating the cube Update selection after each animation, and prevent other views from interfering with selection 2011-02-20 John Darrington Re-enable solver (for 3x3 only) Updated the way in which the colour select dialog works 2011-02-13 John Darrington Add a radiobutton to the New dialog to specify solved or random Updated NEWS file Fixed bug rotating side views Add ability to show multiple views at users request Renamed Settings menu to View Fix problem with animation of 180 degree turns 2011-02-12 John Darrington Update NEWS Remove unnecessary rotations Remove unused variable Make the guile interface work again (sort of) Use property to return cube size instead of direct access 2011-02-09 John Darrington Made guile-hooks.c build again Merge branch 'master' of ssh://jmd@git.sv.gnu.org/srv/git/gnubik Conflicts: src/automake.mk src/glarea.c src/glarea.h src/select.c src/ui.c src/ui.h Add description file 2011-01-29 John Darrington Use this glHint which is supposed to speed things up Set the playtoolbar sensitivities on startup Added the ability to add moves in the middle of a replay Reset the counter and delete the queue when a new game is started Specify the cube as a property of game instead of bodging it Ref count the movements and fix memory leaks 2011-01-28 John Darrington Re-enabled status bar 2011-01-27 John Darrington Remove diagnostic messages Remove unused extern declarations Add Game object which re-instates basic queue functionality 2011-01-25 John Darrington Cubeview: convert some signal handlers to class member functions Pack cubview widgets horizontally instead of vertically Removed ui.c Moved code from ui.c into cubeview.c and added a "move-complete" signal 2011-01-24 John Darrington Replace gdk_gl_window_destroy with g_object_unref Create a "moved" signal and use it to update the display Constness Set the aspect using a property instead of kluding it Simplify the rotate_cube function Allow the cubeview to maintain a different aspect of the cube 2011-01-23 John Darrington Animate all associated viewers when a move signal is received Make the "move" signal take a move struct Fix update of radiobuttons in colour dialog Start to encapsulate move_data as a seperate structure 2011-01-22 John Darrington Remove call to scene_init which is no longer necessary Added a signal which occurs on each move Remove commented out code Eliminate static variable scene_init Added a 'cube' property to the cubeview object Add a property to the cube object for setting its size Remove final reference to 'the_cube' Eliminate further references to 'the_cube' Eliminate further references to 'the_cube' Removed further reference to 'the_cube' Eliminate a few more references to 'the_cube' Make setting cube size work again First step to elimination of the_cube global Convert struct cube into a GObject Eliminate opts static variable Eliminate cursorAngle static variable Perform the rotation on the cube structure before the animation rather than afterwards Completed the elimination of animation global First step in eliminating Animation global Create a share context so that GL textures etc are common to all cubeview widgets Temporarily remove unused menu entries 2011-01-20 John Darrington Eliminate another static datum Eliminate global variable Make global variable take file scope 2011-01-19 John Darrington Eliminate a global variable 2011-01-17 John Darrington Made the glarea.c file into a gbk_cubeview widget 2011-01-16 John Darrington Better encapsulate glarea widget set_the_colours: Move from main.c to glarea.c 2011-01-09 John Darrington Re-enable animations Allow selections to be made from either cube rendering 2011-01-08 John Darrington Ensure that enter-notify-event callback doesn't disable later ones Allow multiple views of the cube 2011-01-07 John Darrington Temporarily disable redisplay Remove call to postRedisplay from rotate_cube Change the_display_context from struct to struct * 2011-01-05 John Darrington Seperate control from animation Fix cube scrambling algorithm rotate_slice: change signature Combine move_data and Slice_Blocks since they are closely related Turn on playbar Remove duplicate code Remove redundant member from Slice_Blocks Eliminate a global variable the_pending_movement Use parameter for mouse button callback instead of global variable Use the pointer created by previous change Add optional parameter to selection function Initialise members of cublet_selection 2011-01-04 John Darrington Re-added the play toolbar - doesn't do anything yet 2011-01-03 John Darrington Update TODO Update copyright messages Update documentation 2011-01-02 John Darrington Optimise quarternion ops for speed Re-added ability to set textures 2011-01-01 John Darrington Adjust argument type to error_dialog Initialise the selection stop detect to a known state Fix memory leak Re-added basic colour selection dialog. 2010-12-25 John Darrington Fix problem initialising selection system Remove legacy code Added Game->New menuitems Move comment to where it belongs Remove pointless wrappers Re-add basic version of menubar Canonicalise signal names to use hyphens rather than underscores Remove redundant call in display routine Optimise transform for speed by reducing the cache misses Reduce scope of callback functions Further encapsulate display_context Whitespace changes only Make more of the references to the_display_context indirect Remove pointless typedef Reduce the number of explicit references to global variable Rename global variable to something more obvious Remove ill-conceived function 2010-12-24 John Darrington Remove redundant variable Encapsulate parameters relating to the redisplay Disable selection mechanism when the pointer is not in the window UnsetMotion - make static Remove diagnostics Rename mouse function Remove write only variable Remove unnecessary call to update_selection Gather animation parameters into their own struct Rename select functions Fix bug in turn direction Only render the ancilliary face polygons when necessary Remove the highlighted block feature which has not been used for years pickPolygons: Remove useless parameters Temporarily remove move queue Encapsulate the selection mechanism into its own object Remove redundant variable timerActive Disable declare_win Reduced the scope of some static variables Temporarily disable all peripheral widgets and features Whitespace changes only 2010-12-22 John Darrington Seperate the initialisation of the scene view from the projection New struct scene_view Seperatate the relisation of the glarea widget Move callbacks connections from glarea.c to main.c Remove unused parameter Make function file scope Insist on 180 degree turns if the section is square Change the move_data struct to include the number of turns Set the size spinbuttons from the current size Provide destructor for pref_state struct 2010-12-21 John Darrington Optimised the rendering a little 2010-12-20 John Darrington Eliminate some global variables Fix bounding sphere radius constness Remove unnecessary macros Removed redundant macros Removed superfluous #include Move icons from gnome theme to hicolor theme since that is the default for Gtk+ programs constness Remove unnecessary macros Removed redundant macros Removed superfluous #include Move icons from gnome theme to hicolor theme since that is the default for Gtk+ programs 2010-12-19 John Darrington Re-enable internal face hiding Remove some pointless functions Updated NEWS file Fix texture rendering Whitespace changes only Allow non-cubic cubes This change makes it possible to have generalised NxMxP cuboid. However the following compromises have been made in order to achieve this: a) Internal face hiding is disabled. b) Some 90 degree moves are now illegal. These need to be blocked. There fore irregular cubes may not be scrambled. c) Scripting has been disabled. d) Textures probably don't work. Merge commit 'cloacine/master' Created new icon set and use modern interface for it 2010-12-16 John Darrington tidy up some memory allocation code rename cube_get_dimension to cube_get_size Update da.po from TP Update fi.po from TP 2010-12-15 John Darrington Change bitfield from signed to unsigned type Remove some redundant const qualifiers Remove unused function Make Glut check conditional upon debug features Update new Swedish translation from TP Remove turn_indicator rendering which hasn't been used for many years 2010-12-11 John Darrington Rename pt_PT.po to pt.po since thats what TP uses Use the standard user config dir instead of rolling our own. Add Slovenian translation Make new_game_dimension variable take file scope Change version id from 2.4 to 2.4pre Change list of po files to one per line 2010-12-08 John Darrington Enable depth buffer which for some reason wasn't turned on Whitespace changes only 2010-12-05 John Darrington Rename no.po to nb.po Apparently the no language code is obsolete and nb is the correct one. Rename gr.po to el.po since this is the correct iso code for Greek Re-enable show-hide menuitem 2010-12-01 John Darrington Added gr to the list of localisations Add a "pre" suffix to the version 2010-11-28 John Darrington Remove unnecessary #includes M_PI is defined by posix. So we don't need our own Remove unused #include 2010-11-27 John Darrington Eliminate cube_dimension global Eliminate global variable Remove unnecessary #includes Correct some #include directives Rename menus --> dialogs Rename some functions and delete some unused ones Whitespace changes only Removed superfluous cast Eliminated some static variables Make cursor bitmaps const Avoid use of global Deal properly with preferences_dialog response Remove commented code Set window as parent to dialog boxes Tidy up creation of preferences menu 2010-11-26 John Darrington Remove unused function Remove function print_cube_error Cosmetic improvements to the error dialog box Change file encoding to UTF-8 Internationalise a string that was forgotten Use argument instead of global variable Eliminate one global. window and main_application_window were two global pointers pointing to the same place. So get rid of the former. Update INSTALL file Create the .gmo files in the all target create ChangeLog before trying to run automake Added a makefile to assist with bootstrapping Removed some resources which are no longer applicable Make sure that menuitems get translated Made sure that accelerator keys work 2010-11-25 John Darrington Added definition of _ to all the scripts which use it Ensure that script callbacks don't get garbage collected Re-sync po files Internationalised the scheme scripts Valgrind shows overlapping src and dest. So use memmove instead Remove fancy comment decorations Remove unnecessary casts 2010-11-24 John Darrington Change scheme evaluation to use an expression rather than a string Whitespace changes only Update NEWS file to 2.4 Updated version number and dependencies 2010-11-23 John Darrington Re-enabled scripts 2010-11-22 John Darrington Fix some deprecated constructs Remove some unnecessary casts 2010-11-21 John Darrington Re-enable scripts in the menubar 2010-11-20 John Darrington modernised the about dialog Use Stock Items instead of our own labels 2010-11-16 John Darrington Remove obsolete Makefile.am file 2010-11-15 John Darrington Use stock_icon on about menu Updated the way that menus are created. Instead of the old fashioned menuItemFactory use the new GtkUIManger feature. 2010-11-13 John Darrington Remove .info file from the repository. This file is generated so doesn't belong in the repository Updated Russian and Polish translations. Added Ukranian translation~ Documentation: Remove reference to Athena 2010-11-12 John Darrington Conditinally compile the X resource colour code. Only build the code to set the colours from X resources if this target has X available. Use GL or Gtk symbols as appropriate instead of ones from Xlib.h also remove unnecessary X call. 2010-11-09 John Darrington update .gitignore 2010-11-08 John Darrington Avoid Gtk Warning about non-zero page size in GtkAdjustment Apparently the last argument of gtk_adjustment_new should always be zero in recent Gtk versions. We never used this argument anyway so set it to zero to keep everyone happy. 2010-11-07 John Darrington Change mode of source files Remove some functions which had no effect Added gitlog-to-changelog from gnulib Build the po directory recursively. Don't use the gettext method of building the po directory. Instead create it ourselves. Experience has shown less trouble that way. Add ChangeLog to .gitignore Use macros from the autoconf archive instead of our own. Carlo Bramini reported that GL[[U]T] detection failed on windows. Instead of reinventing the wheel and trying to fix this, this change uses the macros from the autoconf archive. Hopefully the authors have a lot more experience than myself. Created .gitignore file Automatically generate the ChangeLog file automake.mk: Remove reference to files which no longer exist Avoid problems creating m4 directory Update README_developer file Move auxilliary build files to their own directory widget-set.c: Move X11 specific code to bottom of file. Is this really needed anymore ? Libraries should be in LDADD not LDFLAGS Reported by Carlo Bramini Remove config.h.in from repository. This file should be generated by autogen.sh so make that change. Test for existence of pwd.h in configure. Reported by Carlo Bramini Remove obsolete RCSID lines Add #include lines to every .c file First commit to Git Repository. The CVS repository is now deprecated. 2010-11-07 gettextize * Makefile.am (ACLOCAL_AMFLAGS): New variable. * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.18. Mon Jan 19 15:53:54 WST 2009 John Darrington * Fix seg fault when closing the colour selection dialog with a delete signal. Sun Jan 18 22:07:45 WST 2009 John Darrington * If the attempt to configure the framebuffer fails, try again without the accumulation buffer. Fri Jan 16 08:27:46 WST 2009 John Darrington * Cope with OpenGL contexts that don't have an accumulation buffer, by not attempting to anti-alias in these instances. Thu Jan 15 08:51:39 WST 2009 John Darrington * Fail more gracefully when cube dimension is too big for the memory. * Changed some unsigned ints to signed ones where appropriate. Fri Dec 5 08:39:49 WST 2008 John Darrington * src/colour-sel.c src/glarea.c src/menus.c src/select.c src/ui.h: Updated some deprecated constructs with modern counterparts. Thanks to Ivaylo Valkov for supplying this patch. John Darrington * Used a non-recursive make system instead of the dodgy recursive version. * added gr.po pt_BR.po zh_CN.po pt.po localisations. * src/widget-ui.c: Used GTK Stock items instead of our own icons. * icons/*: Deleted per above. * src/*athena*: Removed. * src/*.c: Added #include * src/*.h: Removed any calls to #include Mon Nov 7 18:37:14 WST 2005 John Darrington * renamed fr_FR.po to fr.po since the translation would appear to be OK for any West African / South Pacific / Canadian french too. (original translator unavailable for comment). Sat Jun 22 12:44:17 WST 2005 John Darrington * po/nl.po, po/LINGUAS: Added Dutch translation. * configure.ac: Added error message if guile is not installed, and --without-guile is not used. * configure.ac, Makefile.am: Made gettext 0.14.4 happy, by removing m4 directory. * src/Makefile.am: Fixed problems compiling without guile. * src/colour-sel-gtk.c, src/drwBlock.c, src/glarea-gtk.c, src/select-common.c, src/textures.h, src/ui.h, src/widget-set-gtk.c: Fixed some warnings Sat Feb 5 10:11:20 WST 2005 John Darrington * widget-set-gtk.c: Copied the menu_items so that gettext can take effect. * Updated the German translation. * Updated the Russian and Polish translations. Wed Aug 18 20:12:12 WST 2004 John Darrington * GNUbik 2.2 Released * Added a menu to turn on/off the statusbar and play toolbar. * Added some stock icons to the menus. * Fixed a buglet where the play toolbar would expand when the window was resized. * Reworked some bad code in widget-set-gtk.c where the menu structure was (needlessly) being created dynamically instead of statically. * Fixed a bug where the program would crash if the cube was rebuilt during the middle of a sequence of moves. Sun Aug 1 11:23:00 WST 2004 John Darrington * added a Catalan translation Sat Jul 31 17:39:59 WST 2004 John Darrington * added a Basque translation * fixed problems relating to not being able to get certain visuals 2004-02-17 Dale Mellor * move-queue.c, move-queue.h, move-queue_i.h, ui.c: Removed the move queue functionality from ui.c and created a new object to encapsulate the functionality. * src/widget-set-gtk.c, ui.c: Added code to create video-style play/replay buttons for manipulating the move queue. Thu Jan 22 18:13:32 WST 2004 * GNUbik 2.1 Released 2004-01-21 Sergey Poznyakoff * po/Makevars: Initialize MSGID_BUGS_ADDRESS variable. * po/LINGUAS: New file * po/pl.po: New file * po/ru.po: New file * src/glarea-gtk.c (resize): Fixed coredump. 2004-01-07 Dale Mellor * doc/gnubik.texinfo, doc/gnubik-rubric: Updated documentation with notes for script writers and core hackers. Wed Jan 7 00:35:20 WST 2004 John Darrington * Added a gtk_main_quit callback to the top level window 2004-01-05 Dale Mellor * Added support for Guile scripts (Script-fu). * Created scheme code for manipulating the cube according to the `flubrd' symbolism. * Created the baseline solver script. * Created the script implementing randomizers. 05-01-2004 John Darrington * Fixed a problem where autoconf was looking for the wrong version of gdk_pixbuf * Added an Italian localisation * Moved to autoconf 2.59 and gettext 0.13 * Added a Spanish localisation 21-11-2003 John Darrington * GNubik 2.0 Released * Renamed to GNUbik * Changed configure to complain if gtkglext is not present * Added a French translation 05-08-2003 John Darrington * Rubik 1.16 Released * Changed the custom message dialogs for gtk standard ones * Made the colour select window, the about window and the Preferences window transient for the main window. * Added a message to explain when the cube is not solved even though it may appear to be * Added some drag-and-drop support to the colour/image selection * Set the lighting to be off by default. It can cause certain colour combinations to be confused. * Added a Danish localisation * Changed the project name to avoid trademark violations * Removed some deprecated GTK+ constructs * Fixed colour allocation problem on indexed displays * Changed some buttons to stock items 16-07-2003 John Darrington * Rubik 1.15 Released * Started using automake for the build system * Added transparency to the gdk icon * Internationalisation * Added lighting * Added antialiasing * Added a feature allowing images to be rendered to the cube * Made the mouse cursor always point to the direction of rotation * Fixed cube rotation from interfering with block selection * Added Debug feature to show block and axis numbers 23-06-2003 John Darrington * Rubik 1.14 Released 25-03-2003 John Darrington * Rubik 1.13 Released * Ported to GTK+ 07-14-2002 John Darrington * Rubik 1.12 Released gnubik-2.4.3/INSTALL0000644000175000017460000000143713070435673010773 00000000000000Installation of this program has several prerequisites: * Mesa, OpenGL or any other clone of OpenGL. Mesa is available from http://www.mesa3d.org You can find further information about OpenGL at http://www.opengl.org * gtk+-2.0 version 2.24 . * You will also need the GTK Mesa/OpenGL extension library ( http://gtkglext.sourceforge.net ). * libguile version 1.8 or later. To install the program, do the following steps. 1) Run the configure script, by typing the command `./configure'. 2) Type `make'. 3) Check that it works `./src/gnubik'. 4) Check that the documentation files compiled correctly. Type `info -f ./doc/gnubik.info' and then `man ./doc/gnubik.6'. 5) If you like it, type `make install' . This last one, will probably need to be done as root. gnubik-2.4.3/AUTHORS0000644000175000017460000000055013070435673011005 00000000000000John Mark Darrington is the main author and maintainer of this package. Dale Mellor wrote guile_hooks.c, guile_hooks.h, and all of the Scheme code; cube.c, cube_i.h, cube.h, move-queue.c, move-queue_i.h and move-queue.h were written based heavily on previous work by John Darrington. gnubik-2.4.3/configure0000755000175000017460000124023513070437137011650 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for GNUbik 2.4.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 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. as_myself= 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 # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # 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. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} 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 test -x / || 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 : export CONFIG_SHELL # 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. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 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 bug-gnubik@gnu.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: 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_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $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'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # 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; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # 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='GNUbik' PACKAGE_TARNAME='gnubik' PACKAGE_VERSION='2.4.3' PACKAGE_STRING='GNUbik 2.4.3' PACKAGE_BUGREPORT='bug-gnubik@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gnubik' # 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" gt_needs= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS GLUT_LIBS GLUT_CFLAGS GTK_GL_EXT_LIBS GTK_GL_EXT_CFLAGS GDK_GL_EXT_LIBS GDK_GL_EXT_CFLAGS GDK_PIXBUF_LIBS GDK_PIXBUF_CFLAGS GTK_LIBS GTK_CFLAGS GUILE_TOOLS GUILE_CONFIG GUILD GUILE GUILE_LIBS GUILE_CFLAGS GLU_LIBS GLU_CFLAGS GL_LIBS GL_CFLAGS X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS XMKMF POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS host_os host_vendor host_cpu host build_os build_vendor build_cpu build XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS SED cc_is_gcc_FALSE cc_is_gcc_TRUE PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM 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' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_nls with_gnu_ld enable_rpath with_libiconv_prefix with_libintl_prefix enable_debug with_x ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR XMKMF GL_CFLAGS GL_LIBS GLU_CFLAGS GLU_LIBS GUILE_CFLAGS GUILE_LIBS GTK_CFLAGS GTK_LIBS GDK_PIXBUF_CFLAGS GDK_PIXBUF_LIBS GDK_GL_EXT_CFLAGS GDK_GL_EXT_LIBS GTK_GL_EXT_CFLAGS GTK_GL_EXT_LIBS GLUT_CFLAGS GLUT_LIBS' # 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 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 GNUbik 2.4.3 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/gnubik] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR 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 GNUbik 2.4.3:";; 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-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --enable-debug Turn on debugging Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-x use the X Window System 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 CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path XMKMF Path to xmkmf, Makefile generator for X Window System GL_CFLAGS C compiler flags for GL, overriding pkg-config GL_LIBS linker flags for GL, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config GUILE_CFLAGS C compiler flags for GUILE, overriding pkg-config GUILE_LIBS linker flags for GUILE, overriding pkg-config GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config GDK_PIXBUF_CFLAGS C compiler flags for GDK_PIXBUF, overriding pkg-config GDK_PIXBUF_LIBS linker flags for GDK_PIXBUF, overriding pkg-config GDK_GL_EXT_CFLAGS C compiler flags for GDK_GL_EXT, overriding pkg-config GDK_GL_EXT_LIBS linker flags for GDK_GL_EXT, overriding pkg-config GTK_GL_EXT_CFLAGS C compiler flags for GTK_GL_EXT, overriding pkg-config GTK_GL_EXT_LIBS linker flags for GTK_GL_EXT, overriding pkg-config GLUT_CFLAGS C compiler flags for GLUT, overriding pkg-config GLUT_LIBS linker flags for GLUT, overriding pkg-config 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 . GNUbik home page: . _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 GNUbik configure 2.4.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_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; ${as_lineno_stack:+:} 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 \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; 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 bug-gnubik@gnu.org ## ## --------------------------------- ##" ) | 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 \${$3+:} false; 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; ${as_lineno_stack:+:} 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # 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 \${$3+:} false; 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_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 || 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; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { 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 \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext 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; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func 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 GNUbik $as_me 2.4.3, which was generated by GNU Autoconf 2.69. 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 gt_needs="$gt_needs need-ngettext" # 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 ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; 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 build-aux \"$srcdir\"/build-aux" "$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. ac_config_headers="$ac_config_headers config.h" am__api_version='1.15' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $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 STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $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_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" 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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk 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 ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$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 AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gnubik' VERSION='2.4.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= 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 "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_objext+:} false; 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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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 struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= 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 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 ${ac_cv_prog_CPP+:} false; 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 ${ac_cv_path_GREP+:} false; 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" as_fn_executable_p "$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 ${ac_cv_path_EGREP+:} false; 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" as_fn_executable_p "$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 ${ac_cv_header_stdc+:} false; 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 ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h 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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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 { $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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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 struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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 depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-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 ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$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 PKG_CONFIG=$ac_cv_path_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 fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-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 ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$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_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_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_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi if test x"$GCC" = x"yes" ; then cc_is_gcc_TRUE= cc_is_gcc_FALSE='#' else cc_is_gcc_TRUE='#' cc_is_gcc_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_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 do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_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 '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_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_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$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 test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # 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 ${ac_cv_build+:} false; 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 ${ac_cv_host+:} false; 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 # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; case "${enableval}" in yes) debug=true ;; no) debug=false ;; *) as_fn_error $? "bad value ${enableval} for --enable-debug" "$LINENO" 5 ;; esac else debug=false fi if test x"$debug" = x"true" ; then $as_echo "#define DEBUG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GL" >&5 $as_echo_n "checking for GL... " >&6; } if test -n "$GL_CFLAGS"; then pkg_cv_GL_CFLAGS="$GL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gl\""; } >&5 ($PKG_CONFIG --exists --print-errors "gl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GL_CFLAGS=`$PKG_CONFIG --cflags "gl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GL_LIBS"; then pkg_cv_GL_LIBS="$GL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gl\""; } >&5 ($PKG_CONFIG --exists --print-errors "gl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GL_LIBS=`$PKG_CONFIG --libs "gl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gl" 2>&1` else GL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GL_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing glEnable" >&5 $as_echo_n "checking for library containing glEnable... " >&6; } if ${ac_cv_search_glEnable+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char glEnable (); int main () { return glEnable (); ; return 0; } _ACEOF for ac_lib in '' GL; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_glEnable=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_glEnable+:} false; then : break fi done if ${ac_cv_search_glEnable+:} false; then : else ac_cv_search_glEnable=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glEnable" >&5 $as_echo "$ac_cv_search_glEnable" >&6; } ac_res=$ac_cv_search_glEnable if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"No GL library seems to be installed\"" "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing glEnable" >&5 $as_echo_n "checking for library containing glEnable... " >&6; } if ${ac_cv_search_glEnable+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char glEnable (); int main () { return glEnable (); ; return 0; } _ACEOF for ac_lib in '' GL; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_glEnable=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_glEnable+:} false; then : break fi done if ${ac_cv_search_glEnable+:} false; then : else ac_cv_search_glEnable=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glEnable" >&5 $as_echo "$ac_cv_search_glEnable" >&6; } ac_res=$ac_cv_search_glEnable if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"No GL library seems to be installed\"" "$LINENO" 5 fi else GL_CFLAGS=$pkg_cv_GL_CFLAGS GL_LIBS=$pkg_cv_GL_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLU" >&5 $as_echo_n "checking for GLU... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gluErrorString" >&5 $as_echo_n "checking for library containing gluErrorString... " >&6; } if ${ac_cv_search_gluErrorString+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gluErrorString (); int main () { return gluErrorString (); ; return 0; } _ACEOF for ac_lib in '' GLU; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gluErrorString=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gluErrorString+:} false; then : break fi done if ${ac_cv_search_gluErrorString+:} false; then : else ac_cv_search_gluErrorString=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gluErrorString" >&5 $as_echo "$ac_cv_search_gluErrorString" >&6; } ac_res=$ac_cv_search_gluErrorString if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"No GLU library seems to be installed\"" "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gluErrorString" >&5 $as_echo_n "checking for library containing gluErrorString... " >&6; } if ${ac_cv_search_gluErrorString+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gluErrorString (); int main () { return gluErrorString (); ; return 0; } _ACEOF for ac_lib in '' GLU; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_gluErrorString=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_gluErrorString+:} false; then : break fi done if ${ac_cv_search_gluErrorString+:} false; then : else ac_cv_search_gluErrorString=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gluErrorString" >&5 $as_echo "$ac_cv_search_gluErrorString" >&6; } ac_res=$ac_cv_search_gluErrorString if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"No GLU library seems to be installed\"" "$LINENO" 5 fi else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GUILE" >&5 $as_echo_n "checking for GUILE... " >&6; } if test -n "$GUILE_CFLAGS"; then pkg_cv_GUILE_CFLAGS="$GUILE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"guile-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "guile-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GUILE_CFLAGS=`$PKG_CONFIG --cflags "guile-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GUILE_LIBS"; then pkg_cv_GUILE_LIBS="$GUILE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"guile-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "guile-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GUILE_LIBS=`$PKG_CONFIG --libs "guile-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GUILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "guile-2.0" 2>&1` else GUILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "guile-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GUILE_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing scm_c_string_length" >&5 $as_echo_n "checking for library containing scm_c_string_length... " >&6; } if ${ac_cv_search_scm_c_string_length+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char scm_c_string_length (); int main () { return scm_c_string_length (); ; return 0; } _ACEOF for ac_lib in '' guile; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_scm_c_string_length=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_scm_c_string_length+:} false; then : break fi done if ${ac_cv_search_scm_c_string_length+:} false; then : else ac_cv_search_scm_c_string_length=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_scm_c_string_length" >&5 $as_echo "$ac_cv_search_scm_c_string_length" >&6; } ac_res=$ac_cv_search_scm_c_string_length if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"Guile 2.0 or later is required\"" "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing scm_c_string_length" >&5 $as_echo_n "checking for library containing scm_c_string_length... " >&6; } if ${ac_cv_search_scm_c_string_length+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char scm_c_string_length (); int main () { return scm_c_string_length (); ; return 0; } _ACEOF for ac_lib in '' guile; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_scm_c_string_length=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_scm_c_string_length+:} false; then : break fi done if ${ac_cv_search_scm_c_string_length+:} false; then : else ac_cv_search_scm_c_string_length=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_scm_c_string_length" >&5 $as_echo "$ac_cv_search_scm_c_string_length" >&6; } ac_res=$ac_cv_search_scm_c_string_length if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"Guile 2.0 or later is required\"" "$LINENO" 5 fi else GUILE_CFLAGS=$pkg_cv_GUILE_CFLAGS GUILE_LIBS=$pkg_cv_GUILE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi # Extract the first word of "guile", so it can be a program name with args. set dummy guile; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GUILE+:} false; then : $as_echo_n "(cached) " >&6 else case $GUILE in [\\/]* | ?:[\\/]*) ac_cv_path_GUILE="$GUILE" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GUILE="$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 GUILE=$ac_cv_path_GUILE if test -n "$GUILE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE" >&5 $as_echo "$GUILE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi _guile_required_version="$GUILE_EFFECTIVE_VERSION" if test -z "$_guile_required_version"; then _guile_required_version=2.0 fi if test "$GUILE" = "" ; then as_fn_error $? "guile required but not found" "$LINENO" 5 fi _guile_effective_version=`$GUILE -c "(display (effective-version))"` if test -z "$GUILE_EFFECTIVE_VERSION"; then GUILE_EFFECTIVE_VERSION=$_guile_effective_version elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then as_fn_error $? "found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version" "$LINENO" 5 fi _guile_major_version=`$GUILE -c "(display (major-version))"` _guile_minor_version=`$GUILE -c "(display (minor-version))"` _guile_micro_version=`$GUILE -c "(display (micro-version))"` _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Guile version >= $_guile_required_version" >&5 $as_echo_n "checking for Guile version >= $_guile_required_version... " >&6; } _major_version=`echo $_guile_required_version | cut -d . -f 1` _minor_version=`echo $_guile_required_version | cut -d . -f 2` _micro_version=`echo $_guile_required_version | cut -d . -f 3` if test "$_guile_major_version" -ge "$_major_version"; then if test "$_guile_minor_version" -ge "$_minor_version"; then if test -n "$_micro_version"; then if test "$_guile_micro_version" -lt "$_micro_version"; then as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 fi fi elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then # Allow prereleases that have the right effective version. true else as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 fi else as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_guile_prog_version" >&5 $as_echo "$_guile_prog_version" >&6; } # Extract the first word of "guild", so it can be a program name with args. set dummy guild; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GUILD+:} false; then : $as_echo_n "(cached) " >&6 else case $GUILD in [\\/]* | ?:[\\/]*) ac_cv_path_GUILD="$GUILD" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GUILD="$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 GUILD=$ac_cv_path_GUILD if test -n "$GUILD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILD" >&5 $as_echo "$GUILD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "guile-config", so it can be a program name with args. set dummy guile-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 ${ac_cv_path_GUILE_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $GUILE_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GUILE_CONFIG="$GUILE_CONFIG" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GUILE_CONFIG="$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 GUILE_CONFIG=$ac_cv_path_GUILE_CONFIG if test -n "$GUILE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_CONFIG" >&5 $as_echo "$GUILE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -n "$GUILD"; then GUILE_TOOLS=$GUILD else # Extract the first word of "guile-tools", so it can be a program name with args. set dummy guile-tools; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GUILE_TOOLS+:} false; then : $as_echo_n "(cached) " >&6 else case $GUILE_TOOLS in [\\/]* | ?:[\\/]*) ac_cv_path_GUILE_TOOLS="$GUILE_TOOLS" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GUILE_TOOLS="$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 GUILE_TOOLS=$ac_cv_path_GUILE_TOOLS if test -n "$GUILE_TOOLS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GUILE_TOOLS" >&5 $as_echo "$GUILE_TOOLS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cos" >&5 $as_echo_n "checking for library containing cos... " >&6; } if ${ac_cv_search_cos+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cos (); int main () { return cos (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_cos=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_cos+:} false; then : break fi done if ${ac_cv_search_cos+:} false; then : else ac_cv_search_cos=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_cos" >&5 $as_echo "$ac_cv_search_cos" >&6; } ac_res=$ac_cv_search_cos if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"No maths library present\" " "$LINENO" 5 fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 $as_echo_n "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.24.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.24.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.24.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.24.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.24.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.24.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.24.0" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.24.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-2.0 >= 2.24.0) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK_PIXBUF" >&5 $as_echo_n "checking for GDK_PIXBUF... " >&6; } if test -n "$GDK_PIXBUF_CFLAGS"; then pkg_cv_GDK_PIXBUF_CFLAGS="$GDK_PIXBUF_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-pixbuf-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gdk-pixbuf-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GDK_PIXBUF_CFLAGS=`$PKG_CONFIG --cflags "gdk-pixbuf-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GDK_PIXBUF_LIBS"; then pkg_cv_GDK_PIXBUF_LIBS="$GDK_PIXBUF_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-pixbuf-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gdk-pixbuf-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GDK_PIXBUF_LIBS=`$PKG_CONFIG --libs "gdk-pixbuf-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GDK_PIXBUF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gdk-pixbuf-2.0" 2>&1` else GDK_PIXBUF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gdk-pixbuf-2.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GDK_PIXBUF_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gdk-pixbuf-2.0) were not met: $GDK_PIXBUF_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GDK_PIXBUF_CFLAGS and GDK_PIXBUF_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GDK_PIXBUF_CFLAGS and GDK_PIXBUF_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GDK_PIXBUF_CFLAGS=$pkg_cv_GDK_PIXBUF_CFLAGS GDK_PIXBUF_LIBS=$pkg_cv_GDK_PIXBUF_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK_GL_EXT" >&5 $as_echo_n "checking for GDK_GL_EXT... " >&6; } if test -n "$GDK_GL_EXT_CFLAGS"; then pkg_cv_GDK_GL_EXT_CFLAGS="$GDK_GL_EXT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdkglext-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gdkglext-1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GDK_GL_EXT_CFLAGS=`$PKG_CONFIG --cflags "gdkglext-1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GDK_GL_EXT_LIBS"; then pkg_cv_GDK_GL_EXT_LIBS="$GDK_GL_EXT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdkglext-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gdkglext-1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GDK_GL_EXT_LIBS=`$PKG_CONFIG --libs "gdkglext-1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GDK_GL_EXT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gdkglext-1.0" 2>&1` else GDK_GL_EXT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gdkglext-1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GDK_GL_EXT_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gdkglext-1.0) were not met: $GDK_GL_EXT_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GDK_GL_EXT_CFLAGS and GDK_GL_EXT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GDK_GL_EXT_CFLAGS and GDK_GL_EXT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GDK_GL_EXT_CFLAGS=$pkg_cv_GDK_GL_EXT_CFLAGS GDK_GL_EXT_LIBS=$pkg_cv_GDK_GL_EXT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK_GL_EXT" >&5 $as_echo_n "checking for GTK_GL_EXT... " >&6; } if test -n "$GTK_GL_EXT_CFLAGS"; then pkg_cv_GTK_GL_EXT_CFLAGS="$GTK_GL_EXT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkglext-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtkglext-1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_GL_EXT_CFLAGS=`$PKG_CONFIG --cflags "gtkglext-1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_GL_EXT_LIBS"; then pkg_cv_GTK_GL_EXT_LIBS="$GTK_GL_EXT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtkglext-1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtkglext-1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_GL_EXT_LIBS=`$PKG_CONFIG --libs "gtkglext-1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_GL_EXT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtkglext-1.0" 2>&1` else GTK_GL_EXT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtkglext-1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_GL_EXT_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtkglext-1.0) were not met: $GTK_GL_EXT_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_GL_EXT_CFLAGS and GTK_GL_EXT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_GL_EXT_CFLAGS and GTK_GL_EXT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_GL_EXT_CFLAGS=$pkg_cv_GTK_GL_EXT_CFLAGS GTK_GL_EXT_LIBS=$pkg_cv_GTK_GL_EXT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test x"$debug" = x"true" ; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLUT" >&5 $as_echo_n "checking for GLUT... " >&6; } if test -n "$GLUT_CFLAGS"; then pkg_cv_GLUT_CFLAGS="$GLUT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glut\""; } >&5 ($PKG_CONFIG --exists --print-errors "glut") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLUT_CFLAGS=`$PKG_CONFIG --cflags "glut" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLUT_LIBS"; then pkg_cv_GLUT_LIBS="$GLUT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glut\""; } >&5 ($PKG_CONFIG --exists --print-errors "glut") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLUT_LIBS=`$PKG_CONFIG --libs "glut" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLUT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glut" 2>&1` else GLUT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glut" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLUT_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing glutStrokeCharacter" >&5 $as_echo_n "checking for library containing glutStrokeCharacter... " >&6; } if ${ac_cv_search_glutStrokeCharacter+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char glutStrokeCharacter (); int main () { return glutStrokeCharacter (); ; return 0; } _ACEOF for ac_lib in '' glut; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_glutStrokeCharacter=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_glutStrokeCharacter+:} false; then : break fi done if ${ac_cv_search_glutStrokeCharacter+:} false; then : else ac_cv_search_glutStrokeCharacter=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glutStrokeCharacter" >&5 $as_echo "$ac_cv_search_glutStrokeCharacter" >&6; } ac_res=$ac_cv_search_glutStrokeCharacter if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"Compilation with debug was requested but no GLUT library seems to be installed\"" "$LINENO" 5 fi elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing glutStrokeCharacter" >&5 $as_echo_n "checking for library containing glutStrokeCharacter... " >&6; } if ${ac_cv_search_glutStrokeCharacter+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char glutStrokeCharacter (); int main () { return glutStrokeCharacter (); ; return 0; } _ACEOF for ac_lib in '' glut; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_glutStrokeCharacter=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_glutStrokeCharacter+:} false; then : break fi done if ${ac_cv_search_glutStrokeCharacter+:} false; then : else ac_cv_search_glutStrokeCharacter=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_glutStrokeCharacter" >&5 $as_echo "$ac_cv_search_glutStrokeCharacter" >&6; } ac_res=$ac_cv_search_glutStrokeCharacter if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "\"Compilation with debug was requested but no GLUT library seems to be installed\"" "$LINENO" 5 fi else GLUT_CFLAGS=$pkg_cv_GLUT_CFLAGS GLUT_LIBS=$pkg_cv_GLUT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac for ac_func in getopt_long do : ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" if test "x$ac_cv_func_getopt_long" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_LONG 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile po/Makefile" 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 if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${cc_is_gcc_TRUE}" && test -z "${cc_is_gcc_FALSE}"; then as_fn_error $? "conditional \"cc_is_gcc\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${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. as_myself= 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $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'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 GNUbik $as_me 2.4.3, which was generated by GNU Autoconf 2.69. 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 . GNUbik home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ GNUbik config.status 2.4.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 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' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' 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 # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _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" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;; *) 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= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_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 -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # 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 {' >"$ac_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 >>"\$ac_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 >>"\$ac_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 < "$ac_tmp/subs1.awk" > "$ac_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 >"$ac_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_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; 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="$ac_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 >"$ac_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'` as_dir="$ac_dir"; as_fn_mkdir_p 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 # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _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 s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_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' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_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 "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_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 "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_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 "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :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 "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; 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 gnubik-2.4.3/doc/0000755000175000017460000000000013070437266010562 500000000000000gnubik-2.4.3/doc/gnubik.60000644000175000017460000000777013070435673012063 00000000000000.\" .\" GNUbik -- A 3 dimensional magic cube game. .\" Copyright (C) 1998,2003 John Darrington .\" .\" This program 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 3 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, see . .\" $Id: gnubik.6,v 1.2 2008/01/16 10:35:09 jmd Exp $ .TH gnubik 6 "01 January 2011" JMD "GNU Utility Documentation" .SH NAME gnubik \- an interactive, graphic Magic cube program. .SH SYNOPSIS .B gnubik [window_system_options] [-hvs] [-z n[,m[,p]]] [-a m] .SH DESCRIPTION This is a program which displays a 3 dimensional image of a magic cube, as introduced to the world by its Hungarian inventor, Erno Rubik. The user rotates the blocks of the cube, and attempts to solve the puzzle, by moving all the blocks to their correct positions and orientations, resulting in a cube with a single colour on each face. .SH OPERATION .LP The user interacts with the program in the following ways: .SS Viewing the Cube .LP The viewing position may be altered using the arrow keys or by using the mouse. The left and right arrow keys rotate the cube about the vertical axis. The up and down keys rotate the cube about the horizontal axis. Holding down the shift key whilst pressing the left and right arrow keys rotates the cube about the z axis. To rotate the cube using the mouse, hold down button 1 and move the mouse anywhere on the window. If your mouse has a scroll wheel, you can use this to rotate the cube about the z axis. .SS Performing Rotations .LP Rotations are performed using the mouse. To manipulate the cube, place the mouse cursor on a square in the cube, against the edge facing the direction you want to move, and click button 1. .LP The mouse cursor will indicate the direction of rotation. .SH OPTIONS The following options may be specified on the command line at invocation. .TP .B -z n,m,p Draws a cube of size \fBn\fP x \fBm\fP x \fBp\fP, where \fBn\fP,\fBm\fP and \fBp\fP are positive. The default size is 3 x 3 x 3. .TP .B -a m When rotating parts of the cube, show m intermediate positions. The default for this value is 2. Setting to a higher value, will give smoother animations, but will result in a slower program. .TP .B -s Starts with the cube already solved. By default, it starts in a random position. .TP .B -h Display a help message and exit. .TP .B -v Display version number and then exit. .SH IMPLEMENTATION The code for gnubik is written in C and Scheme. It uses the Mesa/OpenGL graphics library, and the Gtk+ library and Guile. As such, it should be easy to generate a version for any system complying with these standards. .SH BUGS .LP The rendering process is slower than it could be, since display lists aren't currently used. The entire image is re-rendered, during each refresh, regardless of which components have changed their appearance. .SH COPYRIGHT .LP Copyright (C) 1998, 2011 John Darrington. .LP This program 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 3 of the License, or (at your option) any later version. .LP 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. .LP You should have received a copy of the GNU General Public License along with this program. If not, see . gnubik-2.4.3/doc/gnubik-rubric0000644000175000017460000002372513070435673013201 00000000000000The rubric for the GNUbik cube program. The program is separated into several distinct libraries of routines. Library routines are called as required by main. The only library which does any rendering is drw-block.c. Select.c uses Xt routines and a few glu commands, and there is state parameter maintenance and initialisation done in main. cube.c and txfm.c are kept free of any Mesa/OpenGL reliance. The libraries interact as follows: cube.c, cube.h, (cube_i.h) These files define a cube object, which holds the state of a cube at any time. On the face of it (pardon the pun), there are 2x2 ways of doing this. The cube can be thought of as a set of faces, or as a set of blocks. Further, there can be an array element for each face/block which gives the location of the face/block, or there can be an array of locations which gives the face/block which sits there. For historical reasons (this program started out as a pure graphical one with no real cube logic) the state of the cube is stored as an array of blocks, including internal ones, with a transformation matrix stored for each block which carries the information of how that block is situated relative to the centre of the cube. The advantage of this approach is that applying rotations to the sides of the cube is easy (just a loop over all blocks applying a rotation matrix to the existing transformation), and rendering is easy (again, just a loop over all blocks applying the user's visual orientation of the cube to the block transformation and leaving it to the graphics to sort out the rendering and hidden face removal). The graphics routines also maintain within the cube object vectors for face normals and orientations (to cope with bitmaps on the faces). The cube object provides getters and setters for the graphics system to these variables. There is one instance, in ui.c, where the cube internals are accessed directly; this is marked with `!!!!!!' and should be eliminated ASAP. The centre of the cube is at location (0,0,0). The blocks are of dimensions 2x2x2. This arrangement means that the position of a block's centre and its extremities may always be described by an integer value, regardless of whether an odd or even cube dimension is specified. The transformation matrices are augmented 4x4, which means to say that the upper 3x3 elements give the rotation, and the bottom row (elements 12, 13, and 14) give the translation (offset from the centre of the cube). Despite the previous paragraph, the matrix elements are stored as GLfloat types, to simplify the graphics programming. The act of rotating a face of the cube is performed in two steps. First the blocks that make up the edge are identified, and returned to the caller in a Slice_Blocks object. This object can then be passed to the rotate routing proper which applies the correct transformation to the positions of those blocks. (The graphics subsystem will perform this latter act in separate steps also, so that the cube turns more smoothly on-screen). With Guile installed, the cube object also provides a method for obtaining a Scheme representation of the state of the cube. Since script-fu is used to analyze the state of the cube, it is simpler to provide the state as an array of facial locations, storing the colour visible at each face (this will need extending to deal with orientations). Finally, as GNUbik is not currently implemented as an object oriented program, a global variable `the_cube' is defined, and functions are made available for creating and destroying the global object. Critique: With the benefit of hindsight, the storage and manipulation of the face normals and `quadrant' orientation vectors can probably best be moved out of the cube object (it is, technically, redundant information; maybe it can be put into a specialized object derived from the cube for the graphical subsystem). Then, all the arithmetic on the cube state can be of a (very) short integer type (instead of GLfloat), thus improving performance and storage. drwBlock.c The drwBlock.c file contains one main routine, which uses Mesa/OpenGL to display a block on the screen. Note that as far as drwBlock is concerned, the block is drawn in its original ( solved ) position. Main transforms the model- view matrix by the current transformation of the block, before displaying it. When the block is rendered, the colour of the outline is specified. This is used to indicate a block which the user has selected to be rotated. select.c The select.c library provides a means for the user to pick a block using the mouse. Xt callbacks are used for this purpose. A block is picked, if the mouse comes to rest on it. This is achieved with two callbacks, a timer callback which is invoked at the hold off period ( the time for which the mouse must have ceased motion ), and a passive motion callback. A flag is set in one callback, and cleared in the other. Thus, if the timer callback sees a set flag, then it knows that the mouse has not moved since the last timer callback event. The block at the current cursor position is then determined, using the methods described in Chapter 13 of the OpenGL Programming Guide. Having selected a block the select.c library, performs a predetermined action, in our case, it redisplays the image, so that the selected block can be indicated. The remaining functions of interest, are turn_indicator, which displays a 3/4 circle, with an arrowhead, to indicate which way the next move will be, and the mouse callback function, mouse, which determines what happens when the user presses a mouse button. Guile integration; guile-hooks.c When the prescence of Guile is detected by the build configuration script, the GNUbik program is modified in the following ways. The main routine (in main.c) becomes a secondary function, and a new outer main initializes the Guile system which in turn calls the inner main routine, which then starts up GNUbik in the usual way. (There are deep technical reasons to do with the run-time stack why Guile has to start in this way). To unify the code, a dummy outer main routine is used when Guile is not present on the system which simply calls the inner main directly. During the development of the menus in the graphics initialization (widget-set-gtk.c), a call is made to GNUbik's script-fu initialization function in guile-hooks.c, which searches out all the scripts on the system and runs them. However, prior to doing this, guile-hooks.c defines all the C functions that are available in the Scheme world, and exports them appropriately. These include a function which registers a Scheme string with a menu item (see next paragraph), a function which obtains the current state of the cube (with the help of the_cube's auxiliary function), and functions which cause the cube to be rotated in the C world (with the help of the_cube object, and a callout to the graphics subsystem to make the animations happen). On initialization, then, GNUbik executes all the scripts it finds, and each script will call the registration function. This function accumulates the registration strings in a file-global structure that is eventually passed back to the caller of the initialization function, which is the part of the graphics subsystem taking care of the initialization of the menubar. This, in turn, dynamically creates the Script-fu submenus. When the user selects a menu item, a callback is called in guile-hooks.c, and the callback data passed to it is the string registered with the menu item. The Guile interpreter is invoked to evaluate the contents of this string in the Guile world, and the effect of that would normally be to invoke a procedure that was defined by one of the scripts during the script initialization loop. flubrd.scm Any respectable script would use the `FLUBRD' wrapper around the raw interface to GNUbik when it can. Thus it is necessary to ensure that this script is available before any of the others run. For this reason (and because it does not directly appear on the menu), this script is considered to be part of the GNUbik program itself and not a generic script. It is therefore located in the .../share/gnubik/guile directory, and the script-fu initialization routine scans this directory before either of the script directories. move-queue.c, move-queue.h, (move-queue_i.h) These files contain the definition of an object which holds a list of all moves applied to a cube (it does not directly interact with the cube), and provides methods for rewinding and playing out the list. A single instance (move_queue) is made in ui.c, and callback methods are defined here which act on the queue. The callback methods are called from the toolbar (built up in widget-set-gtk.c) and from script-fu (guile-hooks.c). Sources of Reference: Woo M., Neider J. & Davis, T., "OpenGL Programming Guide", Second Edition, Addison Wesley, 1997. Kempf R. & Frazier C., "OpenGL Reference Manual", Second Edition, Addison Wesley, 1996. Kilgard M. J., "OpenGL Programming for the X window System", Addison Wesley, 1996. ________________________________________________________________________________ Copyright (C) 2004 John Darrington, Dale Mellor Permission is granted to anyone to make or distribute verbatim copies of this document as received, in any medium, provided that the copyright notice and this permission notice are preserved, thus giving the recipient permission to redistribute in turn. Permission is granted to distribute modified versions of this document, or of portions of it, under the above conditions, provided also that they carry prominent notices stating who last changed them. gnubik-2.4.3/doc/automake.mk0000644000175000017460000000015713070435673012644 00000000000000info_TEXINFOS = doc/gnubik.texinfo EXTRA_DIST = \ doc/gnubik.6 \ doc/gnubik-rubric CLEANFILES = gnubik.dvi gnubik-2.4.3/doc/gnubik.info0000644000175000017460000005300013070436565012635 00000000000000This is gnubik.info, produced by makeinfo version 6.3 from gnubik.texinfo. This file documents GNUbik, a 3D interactive graphic, recreational program. Copyright (C) 1998, 2003 John Darrington 2004 John Darrington, Dale Mellor 2011 John Darrington Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. INFO-DIR-SECTION Games START-INFO-DIR-ENTRY * GNUbik: (gnubik). The GNUbik toy END-INFO-DIR-ENTRY  File: gnubik.info, Node: Top, Next: Invoking, Up: (dir) GNUbik ****** This utility displays a 3 dimensional image of a magic cube -- similar to the original introduced to the world by its Hungarian inventor, Erno Rubik. The user rotates sections of the cube, and attempts to solve the puzzle, by moving all the blocks to their correct positions and orientations, resulting in a cube with a single colour on each face. * Menu: * Invoking:: How to start GNUbik * Using:: How to play it * Configuration:: Some things to tweak * Writing scripts:: Developing your own cube manipulation algorithms  File: gnubik.info, Node: Invoking 1 Running the Program ********************* Invoke GNUbik, by typing its name 'gnubik' into a command line. Or you can set up a window manager menu, or file manager application, to run it. Whatever the chosen method of starting GNUbik, it must have access to a display with which it can render its images. Being an inherently graphic program, it won't do much otherwise. GNUbik accepts all the standard X resource overrides such as '-geometry WWxHH+XX+YY' as well as all those specific to the program itself. *Note Options::.  File: gnubik.info, Node: Using, Next: Configuration, Prev: Invoking, Up: Top 2 What it Does ************** GNUbik is graphic, in both its display, and its interface. User interactions are immediately made visible on the display. * Menu: * Viewing:: How to examine the cube * Manipulating:: How to manipulate the cube * Running scripts:: Requesting automatic manipulations * Replaying moves:: Moving backwards and forwards through the move buffer  File: gnubik.info, Node: Configuration, Next: Writing scripts, Prev: Using, Up: Top 3 Configuration *************** * Menu: * Options:: Command line options * Resources:: X resources  File: gnubik.info, Node: Options, Next: Resources, Up: Configuration 3.1 Options =========== The following options may be specified on the command line at invocation. You can access some of these parameters from a menu whilst the program is running. '-z N[,M[,P]]' '--size=N' Draws a cube of dimension N by M by P, where N, M and P are positive. The size is 3 by 3 by 3. '-a M' '--animation=M' When rotating parts of the cube, show M intermediate positions. The default for this value is 2. Setting to a higher value, will give smoother animations, but will slow down the whole program. '-s' '--solved' Starts with the cube already solved. By default, it starts in a random position. '-h' '--help' Display a help message and exit. '-v' '--version' Display version number and then exit.  File: gnubik.info, Node: Resources, Prev: Options, Up: Configuration 3.2 Resources ============= If your operating system uses the X Windowing System, you can use the following application resources to set the colours of the cube faces: ! Colours of the cube faces ! resource default ! gnubik.color0: Red gnubik.color1: Green gnubik.color2: Blue gnubik.color3: Cyan gnubik.color4: Magenta gnubik.color5: Yellow  File: gnubik.info, Node: Viewing, Next: Manipulating, Prev: Using, Up: Using 4 Examining the Cube ******************** You can change the viewing position of the cube using the mouse or the keyboard. 4.1 Using the keyboard to rotate the cube ========================================= You can re-orientate the cube using the following keys. The and keys rotate the cube about the horizontal axis. The and keys rotate the cube about the vertical axis. Holding down the key whilst pressing the or arrow keys rotates the cube about the z axis. 4.2 Using the mouse to rotate the cube ====================================== Another way to rotate the whole cube is to use the mouse. Hold down Button 1, and move the mouse anywhere on the window. This way, you can rotate the cube horizontally and vertically, If your mouse has a scroll wheel, it can be used to rotate the cube about the z axis.  File: gnubik.info, Node: Manipulating, Next: Running scripts, Prev: Viewing, Up: Using 5 Manipulating the Cube *********************** To manipulate the cube, you need to select a block to move, and a direction to turn it. Place the mouse cursor on a block to select it, then move the cursor against the edge of the block towards the direction you want to turn. Click Button 1 when you're ready to turn make the move. If you hold down the key whilst pressing the mouse button, the rotation will occur in the opposite direction. At all times the mouse cursor will point in the direction of motion.  File: gnubik.info, Node: Running scripts, Next: Replaying moves, Prev: Manipulating, Up: Using 6 Running scripts ***************** As well as manipulating the cube by hand as described in the previous chapter, you can also run scripts that perform automatic manipulations right in front of your eyes. Currently there are scripts available which randomize the cube, and which solve 3x3x3 cubes. When GNUbik starts up, it reads files ending in a '.scm' suffix in the '.../share/gnubik/scripts' directory (system-wide files) and in the '.config/gnubik' directory under your home directory (personal files). These files are scheme scripts, and when they run they register themselves with the system so that items appear on the main GNUbik menu under the heading 'Script'. Making selections from this menu runs the appropriate script.  File: gnubik.info, Node: Replaying moves, Prev: Running scripts, Up: Using 7 Replaying moves ***************** Once moves have been made on the cube, either by hand or by running a script, some of the buttons in the video-style control bar become active. These allow you to move backwards and forwards through the move buffer, so you can replay sequences over and over again. You can also mark the current position, and return to the marked place later. In this way you can experiment with new moves, and when they turn out to lead to a dead-end, you can quickly get the cube back to the old state and try again. This marking also happens automatically whenever you start script-fu - pressing rewind subsequently undoes the effect of the script. Note that when the move buffer is rewound, and then new moves are made on the cube either by hand or by script-fu, then all the future moves in the buffer are discarded and replaced with the new moves. The buttons available are listed below. -- button: rewind Pressing this button will fast-wind (without any animation) the cube to the previous marked position, or to the beginning of the move buffer if there are no marks. -- button: back Pressing this button will undo a single move made on the cube. -- button: stop While the move buffer is being run forwards, either by pressing the PLAY button or by script-fu, this button will stop the sequence after the current rotation has completed. -- button: mark Pressing this button marks the current place in the move buffer. If the buffer is advanced, you can later press the rewind button to return the cube to the state it was when the mark button was pressed. -- button: forward Pressing this button will effect a single move on the cube. -- button: play This button will cause all the moves ahead of the current position to be played out on the cube. This can be interrupted at any time by pressing the STOP button.  File: gnubik.info, Node: Writing scripts, Prev: Configuration, Up: Top 8 Writing scripts ***************** * Menu: * Scripting Introduction:: Introduction to script-fu * Script initialization:: Getting scripts into the system * Raw interface:: The low-level functions scripts use to control the program * Symbolic interface:: Nicer FLUBRD symbolic functions for 3x3x3 cubes * Developer tips:: Friendly advice for script developers  File: gnubik.info, Node: Scripting Introduction, Next: Script initialization, Up: Writing scripts 8.1 Introduction to script-fu ============================= GNUbik's script-fu is implemented with 'GUILE', GNU's ubiquitous extension language, which in turn implements 'scheme', a programming language descended from 'lisp'. In simple words, a script works as follows. When GNUbik starts up, it looks for scripts in standard places and executes each one it finds. In turn, the scripts define some procedures, and register some of their defined procedures with GNUbik, which associates the procedure with an item under the 'Scripts' menu. When you select a menu item, GNUbik executes the procedure that was registered. The procedure will then request an object from GNUbik that reflects the current state of the cube. The procedure then works out a list of moves that it wants to impose on the cube, and sends this list to GNUbik. During the development of this list, the script may manipulate the cube reflection object so that it can keep track of the moves it makes. However, changes to the reflection object are never seen directly by the GNUbik program. Once the script exits, GNUbik will cause all the movements which the script requested to take place on the on-screen cube, right in front of your eyes!  File: gnubik.info, Node: Script initialization, Next: Raw interface, Prev: Scripting Introduction, Up: Writing scripts 8.2 Initialization of the script-fu system ========================================== When GNUbik starts up, it scans the following directories in the order given for files with a '.scm' extension, and executes them in the order found (not necessarily alphabetical!) The directories searched are * '.../share/gnubik/guile' * '.../share/gnubik/scripts' * '~/.config/gnubik' Note that the exact location of the share directory is system dependent. The 'share/gnubik/guile' directory is for scripts which the GNUbik program itself needs to function. They should not be changed once the GNUbik package is installed in a system. The 'share/gnubik/scripts' directory is the place for system administrators to put scripts that all users can see on their GNUbik menus. Finally, the '~/.config/gnubik' directory is located under your home directory, and may contain any scripts that you have written, and which will only appear on the menu when you start the program up. When the system finds a script, that script is executed and must use the following function to register itself with an item on GNUbik's menu bar. -- Procedure: gnubik-create-menu name parent Creates a menu called NAME as a submenu of PARENT. If PARENT is nil then the menu will be located directly under the 'Scripts' menu. The '_' character in front of a letter indicates that that letter should be used as the keyboard accelerator For example, the string 'gnubik-create-menu "my _solver" solvers' will create an item under the 'solvers' sub-menu, with 's' as the keyboard shortcut. -- Procedure: gnubik-register-script code menu MENU should be a menu object returned from GNUBIK-CREATE-MENU. The second argument CODE should be a 'scheme' procedure to run when the menu item is selected. It is the entry point for the script.  File: gnubik.info, Node: Raw interface, Next: Symbolic interface, Prev: Script initialization, Up: Writing scripts 8.3 The basic (low-level) interface =================================== This chapter describes the basic interface that GNUbik provides to the 'scheme' world. This interface can be used with any cube geometry that GNUbik supports, but is not intuitive for humans and the API may change in the future. If the API does change (to make it more consistent!) the version number of cube geometry in a cube object will also change, so any script which uses these functions directly should obtain a cube object from GNUbik and check the geometry version number. 8.3.1 The object given to the scheme world ------------------------------------------ In order to obtain a reflection of the current state of the cube, a script must call -- Procedure: gnubik-cube-state This will return a 'scheme' object, which is in fact a cons cell whose first component is a list describing the geometry of the cube, and the second component is a vector of six vectors of nxn items, where n is the size of the cube. The geometry list consists of a version number, which will change if the definition of the cube object ever changes (scripts should check this to ensure compatibility or else things will surely break); the current version is 1 (one). The next item in the list is the dimensionality of the cube, which currently is always 3. The list then holds three more numbers describing the size of the cube in each direction. So a current 3x3x3 cube will have the geometry list '(1 3 3 3 3)'. The second component of the cube cons cell is a vector of six vectors, one for each face. If you were to look at a cube with face index 4 towards you (remember vector indeces are zero based), then the top face would have index 0 (zero), the bottom 1 (one), the left 2, the right 3, and the back 5. Got it? Stay there. On faces 0 (zero), 3, and 4, the panels are numbered from left to right and top to bottom, so that panel 0 (zero) is at top-left and panel 5 is middle-right, for example. On the other faces, the panels are in the corresponding positions underneath their opposite faces, which means in practice that the numbering is from right to left, top to bottom. For example, the second panel (index 1) on face 2 is at the top. Finally, the 'top' edge of the top panel is against face 2. The elements of the vectors for each page represent the colour that the panels of that face are showing, numbered from 0 (zero) to 5 inclusive (the correspondence between these numbers and the actual colours seen on the cube on the screen is not provided by GNUbik to the scripts). Whew. If that was too sticky and you are using a 3x3x3 cube, then you should proceed to the next chapter which presents a more comfortable (and stable) interface. 8.3.2 Looking at the colours on the faces ----------------------------------------- Once you have a cube object, the following procedures are available to facilitate access to it. -- Procedure: get-colour cube face index This procedure gets the colour of the CUBE at panel INDEX on FACE, where the meaning of the latter two arguments is described above. -- Procedure: set-colour! cube face index colour This procedure sets the colour of the given face to COLOUR. Note that the change takes place only in the 'scheme' CUBE object, not in the actual cube that the user is seeing on her screen. 8.3.3 Moving the object on the screen ------------------------------------- When a script has determined a set of moves which are to be made on a cube, it calls the following procedure to get GNUbik to put the moves into its internal move buffer. -- Procedure: gnubik-append-moves move-list The MOVE-LIST is a list of lists of three items. For any one move (a quarter turn of a slice of the cube), the first item in the specification is the face which lies parallel to the desired slice, and may be 0 (zero), 1 (one) or two corresponding to the back, right and bottom faces. The second item in the specification is the slice number parallel to that plane; the slice next to the specified face has number ('n-1') where 'n' is the size of the cube, and the slices below are separated by (-2). For example, for a cube with three blocks per edge (a 3x3x3 cube, say), the slices are numbered 2, 0 and -2. The final component in a move specification may be 0 (zero) or 1 (one) depending on whether the slice should be moved anticlockwise or clockwise, respectively.  File: gnubik.info, Node: Symbolic interface, Next: Developer tips, Prev: Raw interface, Up: Writing scripts 8.4 FLUBRD symbolic interface for 3x3x3 cubes ============================================= The following functions provide access to a cube object in a way which hides the gory details of the representation. This makes it easier for human beings to write code, and also guards against changes in the low-level API described in the previous chapter. Unfortunately, it currently only works on 3x3x3 cubes. The interface uses the common 'FLUBRD' notation to refer to the various faces and panels on the cube. The letters correspond respectively to the words 'front', 'left', 'up', 'back', 'right' and 'down', and where 'up' and 'down' can be read as 'top' and 'bottom', respectively. 8.4.1 Looking at the colours on the faces ----------------------------------------- The following procedure returns the colour on the panel addressed symbolically by the letters of a given string. -- Procedure: get-colour-symbolic cube symbol The SYMBOL is a string consisting of one, two or three letters. If one letter is supplied, the colour of the panel at the centre of the face indicated by the letter is returned. If two letters are supplied, the colour returned is of the edge panel touching the face given by the second letter. If three letters are supplied, it is the colour of the corner panel which touches the edges indicated by the second two letters. Note that the letters of the symbol must all be lower case. A corresponding function is supplied to make changes to the cube object. -- Procedure: set-colour-symbolic! cube symbol colour This procedure sets the colour of the panel indicated by SYMBOL, defined as above, to COLOUR. Note that changing the colour of a cube does not cause any other changes to take effect. In particular, no rotations of the on-screen cube are initiated. 8.4.2 Moving the faces ---------------------- The following function allows scripts to request that faces of the cube are rotated by a quarter turn. -- Procedure: move-face cube symbol Here, SYMBOL is a string of one or two characters. The first character should always be a lower case letter which indicates which face to move. The default is to turn the face clockwise. This will also occur if the second character supplied is a space or a '+'. Only if a second character is supplied and is a '-' will the face be turned anti-clockwise. Once a script has finished declaring moves in this way, GNUbik will send them to the display buffer for on-screen animation after the script calls -- Procdure: execute-move-buffer! Cause all moves created with the 'move-face' procedure to be applied to the on-screen cube. Note that the on-screen cube will not actually display any change until the script exits. The move buffer can be accessed directly via the symbol 'move-buffer'. It is a list of moves that the low-level procedure 'gnubik-append-moves' expects. Accessing and manipulating it directly before calling 'execute-move-buffer!' may allow a script to perform some post-processing optimizations on the list of moves, for example. Alternatively, if the script decides to duck out or start again, the following procedure may be called to clear the buffer without sending any move notifications to GNUbik. -- Procedure: clear-move-buffer! Empty the MOVE-BUFFER without sending any move requests to the GNUbik program.  File: gnubik.info, Node: Developer tips, Prev: Symbolic interface, Up: Writing scripts 8.5 Hints and tips for script developers ======================================== 8.5.1 'Live' menu entries ------------------------- In order to eliminate the need to shutdown, startup, and then make selections from the menus every time a change is made to a script under development, you can create a script which reads another script every time it is invoked. This way any changes made to the latter script will manifest themselves immediately, speeding up the development cycle. Suppose your development script is '/path/to/dev_script' (this can be anywhere at all in the filesystem). You can create a menu entry 'Dev. test' to load and run this script by putting the following lines into a file called '~/.config/gnubik/dev-test.scm' (define (run-dev-test) (load "/path/to/dev_script") (run-dev-script-proc)) (gnubik-register-script "Dev. test" '(run-dev-test) dev-menu) and then restarting GNUbik. Note that 'run-dev-script-proc' is the name of the procedure you would normally have run directly from the menu (i.e. it is the one you would have passed to 'gnubik-register-script').  Tag Table: Node: Top539 Node: Invoking1177 Node: Using1751 Node: Configuration2214 Node: Options2419 Node: Resources3267 Node: Viewing3735 Node: Manipulating4691 Node: Running scripts5309 Node: Replaying moves6154 Node: Writing scripts8177 Node: Scripting Introduction8710 Node: Script initialization10044 Node: Raw interface12043 Node: Symbolic interface16804 Node: Developer tips20370  End Tag Table gnubik-2.4.3/doc/gnubik.texinfo0000644000175000017460000005126713070435673013372 00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename gnubik.info @settitle GNUbik @c %**end of header @c $Id: gnubik.texinfo,v 1.6 2006/04/19 05:08:56 jmd Exp $ @copying This file documents GNUbik, a 3D interactive graphic, recreational program. Copyright @copyright{} 1998, 2003 John Darrington 2004 John Darrington, Dale Mellor 2011 John Darrington Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. @end copying @titlepage @c use the new format for titles @title GNUbik @vskip 0pt plus 1filll @insertcopying @sp 2 @end titlepage @dircategory Games @direntry * GNUbik: (gnubik). The GNUbik toy @end direntry @node Top, Invoking, , (dir) @top GNUbik @comment node-name, next, previous, up This utility displays a 3 dimensional image of a magic cube --- similar to the original introduced to the world by its Hungarian inventor, Erno Rubik. The user rotates sections of the cube, and attempts to solve the puzzle, by moving all the blocks to their correct positions and orientations, resulting in a cube with a single colour on each face. @menu * Invoking:: How to start GNUbik * Using:: How to play it * Configuration:: Some things to tweak * Writing scripts:: Developing your own cube manipulation algorithms @end menu @node Invoking, , , @chapter Running the Program Invoke GNUbik, by typing its name @code{gnubik} into a command line. Or you can set up a window manager menu, or file manager application, to run it. Whatever the chosen method of starting GNUbik, it must have access to a display with which it can render its images. Being an inherently graphic program, it won't do much otherwise. GNUbik accepts all the standard X resource overrides such as @code{-geometry @var{ww}x@var{hh}+@var{xx}+@var{yy}} as well as all those specific to the program itself. @xref{Options}. @node Using, Configuration, Invoking,Top @chapter What it Does GNUbik is graphic, in both its display, and its interface. User interactions are immediately made visible on the display. @menu * Viewing:: How to examine the cube * Manipulating:: How to manipulate the cube * Running scripts:: Requesting automatic manipulations * Replaying moves:: Moving backwards and forwards through the move buffer @end menu @node Configuration, Writing scripts, Using, Top @chapter Configuration @menu * Options:: Command line options * Resources:: X resources @end menu @node Options, Resources, , Configuration @comment node-name, next, previous, up @section Options The following options may be specified on the command line at invocation. You can access some of these parameters from a menu whilst the program is running. @table @code @item -z @var{n}[,@var{m}[,@var{p}]] @item --size=@var{n} Draws a cube of dimension @var{n} by @var{m} by @var{p}, where @var{n}, @var{m} and @var{p} are positive. The size is 3 by 3 by 3. @item -a @var{m} @item --animation=@var{m} When rotating parts of the cube, show @var{m} intermediate positions. The default for this value is 2. Setting to a higher value, will give smoother animations, but will slow down the whole program. @item -s @item --solved Starts with the cube already solved. By default, it starts in a random position. @item -h @item --help Display a help message and exit. @item -v @item --version Display version number and then exit. @end table @node Resources, , Options, Configuration @comment node-name, next, previous, up @section Resources If your operating system uses the X Windowing System, you can use the following application resources to set the colours of the cube faces: @example ! Colours of the cube faces ! resource default ! gnubik.color0: Red gnubik.color1: Green gnubik.color2: Blue gnubik.color3: Cyan gnubik.color4: Magenta gnubik.color5: Yellow @end example @node Viewing,Manipulating,Using,Using @chapter Examining the Cube You can change the viewing position of the cube using the mouse or the keyboard. @section Using the keyboard to rotate the cube You can re-orientate the cube using the following keys. The @key{Up} and @key{Down} keys rotate the cube about the horizontal axis. The @key{Left} and @key{Right} keys rotate the cube about the vertical axis. Holding down the @key{Shift} key whilst pressing the @key{Left} or @key{Right} arrow keys rotates the cube about the z axis. @section Using the mouse to rotate the cube Another way to rotate the whole cube is to use the mouse. Hold down @w{Button 1}, and move the mouse anywhere on the window. This way, you can rotate the cube horizontally and vertically, If your mouse has a scroll wheel, it can be used to rotate the cube about the z axis. @node Manipulating,Running scripts,Viewing,Using @chapter Manipulating the Cube To manipulate the cube, you need to select a block to move, and a direction to turn it. Place the mouse cursor on a block to select it, then move the cursor against the edge of the block towards the direction you want to turn. Click @w{Button 1} when you're ready to turn make the move. If you hold down the @key{Shift} key whilst pressing the mouse button, the rotation will occur in the opposite direction. At all times the mouse cursor will point in the direction of motion. @node Running scripts,Replaying moves,Manipulating,Using @chapter Running scripts As well as manipulating the cube by hand as described in the previous chapter, you can also run scripts that perform automatic manipulations right in front of your eyes. Currently there are scripts available which randomize the cube, and which solve 3x3x3 cubes. When GNUbik starts up, it reads files ending in a @code{.scm} suffix in the @code{.../share/gnubik/scripts} directory (system-wide files) and in the @code{.config/gnubik} directory under your home directory (personal files). These files are scheme scripts, and when they run they register themselves with the system so that items appear on the main GNUbik menu under the heading @code{Script}. Making selections from this menu runs the appropriate script. @node Replaying moves, , Running scripts, Using @chapter Replaying moves Once moves have been made on the cube, either by hand or by running a script, some of the buttons in the video-style control bar become active. These allow you to move backwards and forwards through the move buffer, so you can replay sequences over and over again. You can also mark the current position, and return to the marked place later. In this way you can experiment with new moves, and when they turn out to lead to a dead-end, you can quickly get the cube back to the old state and try again. This marking also happens automatically whenever you start script-fu -- pressing rewind subsequently undoes the effect of the script. Note that when the move buffer is rewound, and then new moves are made on the cube either by hand or by script-fu, then all the future moves in the buffer are discarded and replaced with the new moves. The buttons available are listed below. @deffn button rewind Pressing this button will fast-wind (without any animation) the cube to the previous marked position, or to the beginning of the move buffer if there are no marks. @end deffn @deffn button back Pressing this button will undo a single move made on the cube. @end deffn @deffn button stop While the move buffer is being run forwards, either by pressing the @var{play} button or by script-fu, this button will stop the sequence after the current rotation has completed. @end deffn @deffn button mark Pressing this button marks the current place in the move buffer. If the buffer is advanced, you can later press the rewind button to return the cube to the state it was when the mark button was pressed. @end deffn @deffn button forward Pressing this button will effect a single move on the cube. @end deffn @deffn button play This button will cause all the moves ahead of the current position to be played out on the cube. This can be interrupted at any time by pressing the @var{stop} button. @end deffn @node Writing scripts, , Configuration, Top @chapter Writing scripts @menu * Scripting Introduction:: Introduction to script-fu * Script initialization:: Getting scripts into the system * Raw interface:: The low-level functions scripts use to control the program * Symbolic interface:: Nicer FLUBRD symbolic functions for 3x3x3 cubes * Developer tips:: Friendly advice for script developers @end menu @node Scripting Introduction, Script initialization, , Writing scripts @section Introduction to script-fu GNUbik's script-fu is implemented with @code{GUILE}, GNU's ubiquitous extension language, which in turn implements @code{scheme}, a programming language descended from @code{lisp}. In simple words, a script works as follows. When GNUbik starts up, it looks for scripts in standard places and executes each one it finds. In turn, the scripts define some procedures, and register some of their defined procedures with GNUbik, which associates the procedure with an item under the @code{Scripts} menu. When you select a menu item, GNUbik executes the procedure that was registered. The procedure will then request an object from GNUbik that reflects the current state of the cube. The procedure then works out a list of moves that it wants to impose on the cube, and sends this list to GNUbik. During the development of this list, the script may manipulate the cube reflection object so that it can keep track of the moves it makes. However, changes to the reflection object are never seen directly by the GNUbik program. Once the script exits, GNUbik will cause all the movements which the script requested to take place on the on-screen cube, right in front of your eyes! @node Script initialization, Raw interface, Scripting Introduction, Writing scripts @section Initialization of the script-fu system When GNUbik starts up, it scans the following directories in the order given for files with a @code{.scm} extension, and executes them in the order found (not necessarily alphabetical!) The directories searched are @itemize @bullet @item @code{.../share/gnubik/guile} @item @code{.../share/gnubik/scripts} @item @code{~/.config/gnubik} @end itemize Note that the exact location of the share directory is system dependent. The @code{share/gnubik/guile} directory is for scripts which the GNUbik program itself needs to function. They should not be changed once the GNUbik package is installed in a system. The @code{share/gnubik/scripts} directory is the place for system administrators to put scripts that all users can see on their GNUbik menus. Finally, the @code{~/.config/gnubik} directory is located under your home directory, and may contain any scripts that you have written, and which will only appear on the menu when you start the program up. When the system finds a script, that script is executed and must use the following function to register itself with an item on GNUbik's menu bar. @deffn Procedure gnubik-create-menu name parent Creates a menu called @var{name} as a submenu of @var{parent}. If @var{parent} is nil then the menu will be located directly under the @code{Scripts} menu. The @code{_} character in front of a letter indicates that that letter should be used as the keyboard accelerator For example, the string @code{gnubik-create-menu "my _solver" solvers} will create an item under the @code{solvers} sub-menu, with @code{s} as the keyboard shortcut. @end deffn @deffn Procedure gnubik-register-script code menu @var{menu} should be a menu object returned from @var{gnubik-create-menu}. The second argument @var{code} should be a @code{scheme} procedure to run when the menu item is selected. It is the entry point for the script. @end deffn @node Raw interface, Symbolic interface, Script initialization, Writing scripts @section The basic (low-level) interface This chapter describes the basic interface that GNUbik provides to the @code{scheme} world. This interface can be used with any cube geometry that GNUbik supports, but is not intuitive for humans and the API may change in the future. If the API does change (to make it more consistent!) the version number of cube geometry in a cube object will also change, so any script which uses these functions directly should obtain a cube object from GNUbik and check the geometry version number. @subsection The object given to the scheme world In order to obtain a reflection of the current state of the cube, a script must call @deffn Procedure gnubik-cube-state This will return a @code{scheme} object, which is in fact a cons cell whose first component is a list describing the geometry of the cube, and the second component is a vector of six vectors of nxn items, where n is the size of the cube. The geometry list consists of a version number, which will change if the definition of the cube object ever changes (scripts should check this to ensure compatibility or else things will surely break); the current version is 1 (one). The next item in the list is the dimensionality of the cube, which currently is always 3. The list then holds three more numbers describing the size of the cube in each direction. So a current 3x3x3 cube will have the geometry list @code{(1 3 3 3 3)}. The second component of the cube cons cell is a vector of six vectors, one for each face. If you were to look at a cube with face index 4 towards you (remember vector indeces are zero based), then the top face would have index 0 (zero), the bottom 1 (one), the left 2, the right 3, and the back 5. Got it? Stay there. On faces 0 (zero), 3, and 4, the panels are numbered from left to right and top to bottom, so that panel 0 (zero) is at top-left and panel 5 is middle-right, for example. On the other faces, the panels are in the corresponding positions underneath their opposite faces, which means in practice that the numbering is from right to left, top to bottom. For example, the second panel (index 1) on face 2 is at the top. Finally, the 'top' edge of the top panel is against face 2. The elements of the vectors for each page represent the colour that the panels of that face are showing, numbered from 0 (zero) to 5 inclusive (the correspondence between these numbers and the actual colours seen on the cube on the screen is not provided by GNUbik to the scripts). @end deffn Whew. If that was too sticky and you are using a 3x3x3 cube, then you should proceed to the next chapter which presents a more comfortable (and stable) interface. @subsection Looking at the colours on the faces Once you have a cube object, the following procedures are available to facilitate access to it. @deffn Procedure get-colour cube face index This procedure gets the colour of the @var{cube} at panel @var{index} on @var{face}, where the meaning of the latter two arguments is described above. @end deffn @deffn Procedure set-colour! cube face index colour This procedure sets the colour of the given face to @var{colour}. Note that the change takes place only in the @code{scheme} @var{cube} object, not in the actual cube that the user is seeing on her screen. @end deffn @subsection Moving the object on the screen When a script has determined a set of moves which are to be made on a cube, it calls the following procedure to get GNUbik to put the moves into its internal move buffer. @deffn Procedure gnubik-append-moves move-list The @var{move-list} is a list of lists of three items. For any one move (a quarter turn of a slice of the cube), the first item in the specification is the face which lies parallel to the desired slice, and may be 0 (zero), 1 (one) or two corresponding to the back, right and bottom faces. The second item in the specification is the slice number parallel to that plane; the slice next to the specified face has number (@code{n-1}) where @code{n} is the size of the cube, and the slices below are separated by (-2). For example, for a cube with three blocks per edge (a 3x3x3 cube, say), the slices are numbered 2, 0 and -2. The final component in a move specification may be 0 (zero) or 1 (one) depending on whether the slice should be moved anticlockwise or clockwise, respectively. @end deffn @node Symbolic interface, Developer tips, Raw interface, Writing scripts @section FLUBRD symbolic interface for 3x3x3 cubes The following functions provide access to a cube object in a way which hides the gory details of the representation. This makes it easier for human beings to write code, and also guards against changes in the low-level API described in the previous chapter. Unfortunately, it currently only works on 3x3x3 cubes. The interface uses the common @code{FLUBRD} notation to refer to the various faces and panels on the cube. The letters correspond respectively to the words @code{front}, @code{left}, @code{up}, @code{back}, @code{right} and @code{down}, and where @code{up} and @code{down} can be read as @code{top} and @code{bottom}, respectively. @subsection Looking at the colours on the faces The following procedure returns the colour on the panel addressed symbolically by the letters of a given string. @deffn Procedure get-colour-symbolic cube symbol The @var{symbol} is a string consisting of one, two or three letters. If one letter is supplied, the colour of the panel at the centre of the face indicated by the letter is returned. If two letters are supplied, the colour returned is of the edge panel touching the face given by the second letter. If three letters are supplied, it is the colour of the corner panel which touches the edges indicated by the second two letters. @end deffn Note that the letters of the symbol must all be lower case. A corresponding function is supplied to make changes to the cube object. @deffn Procedure set-colour-symbolic! cube symbol colour This procedure sets the colour of the panel indicated by @var{symbol}, defined as above, to @var{colour}. @end deffn Note that changing the colour of a cube does not cause any other changes to take effect. In particular, no rotations of the on-screen cube are initiated. @subsection Moving the faces The following function allows scripts to request that faces of the cube are rotated by a quarter turn. @deffn Procedure move-face cube symbol Here, @var{symbol} is a string of one or two characters. The first character should always be a lower case letter which indicates which face to move. The default is to turn the face clockwise. This will also occur if the second character supplied is a space or a @code{+}. Only if a second character is supplied and is a @code{-} will the face be turned anti-clockwise. @end deffn Once a script has finished declaring moves in this way, GNUbik will send them to the display buffer for on-screen animation after the script calls @deffn Procdure execute-move-buffer! Cause all moves created with the @code{move-face} procedure to be applied to the on-screen cube. @end deffn Note that the on-screen cube will not actually display any change until the script exits. The move buffer can be accessed directly via the symbol @code{move-buffer}. It is a list of moves that the low-level procedure @code{gnubik-append-moves} expects. Accessing and manipulating it directly before calling @code{execute-move-buffer!} may allow a script to perform some post-processing optimizations on the list of moves, for example. Alternatively, if the script decides to duck out or start again, the following procedure may be called to clear the buffer without sending any move notifications to GNUbik. @deffn Procedure clear-move-buffer! Empty the @var{move-buffer} without sending any move requests to the GNUbik program. @end deffn @node Developer tips, , Symbolic interface, Writing scripts @section Hints and tips for script developers @subsection `Live' menu entries In order to eliminate the need to shutdown, startup, and then make selections from the menus every time a change is made to a script under development, you can create a script which reads another script every time it is invoked. This way any changes made to the latter script will manifest themselves immediately, speeding up the development cycle. Suppose your development script is @code{/path/to/dev_script} (this can be anywhere at all in the filesystem). You can create a menu entry @code{Dev. test} to load and run this script by putting the following lines into a file called @code{~/.config/gnubik/dev-test.scm} @example (define (run-dev-test) (load "/path/to/dev_script") (run-dev-script-proc)) (gnubik-register-script "Dev. test" '(run-dev-test) dev-menu) @end example and then restarting GNUbik. Note that @code{run-dev-script-proc} is the name of the procedure you would normally have run directly from the menu (i.e. it is the one you would have passed to @code{gnubik-register-script}). @bye gnubik-2.4.3/po/0000755000175000017460000000000013070437266010433 500000000000000gnubik-2.4.3/po/nb.po0000644000175000017460000002204513070436577011321 00000000000000# Norwegian Bokmal translations for the gnubik package. # Copyright (C) 2003 John Darrington # This file is distributed under the same license as the gnubik package. # Stian Hole , 2003. # Johnny A. Solbu , 2014, 2015. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-05-15 02:04+0100\n" "Last-Translator: Johnny A. Solbu \n" "Language-Team: Norwegian Bokmaal \n" "Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1;\n" "X-Generator: Poedit 1.5.7\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Bildevelger" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Alle bilder" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Alle filer" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Fargevelger" #: src/colour-dialog.c:314 msgid "Image" msgstr "Bilde" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Velg" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Velg en bildefil" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Side ved side" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Plasser en kopi av bildet på hver blokk" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaikk" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Plasser en kopi av bilde over hele overflaten til kuben" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "Alminnelig" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Fjern bilde fra kubens overflate" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Størrelse på kuben:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Normal kube" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Setter antall blokker på hver side" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Tillat bare kuber med alle sider i lik størrelse" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Et 3-dimensjonal magikubepuslespill" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Stian Hole - 2003\n" "Johnny A. Solbu - 2014" #: src/dialogs.c:189 msgid "New Game" msgstr "Nytt spill" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensjoner" #: src/dialogs.c:212 msgid "Initial position" msgstr "Utgangsposisjon" #: src/dialogs.c:216 msgid "_Random" msgstr "Tilfeldig" #: src/dialogs.c:220 msgid "_Solved" msgstr "Løst" #: src/menus.c:94 msgid "Rear View" msgstr "Sett bakfra" #: src/menus.c:102 msgid "Bottom View" msgstr "Sett nedenfra" #: src/menus.c:109 msgid "Top View" msgstr "Sett nedenfra" #: src/menus.c:117 msgid "Left View" msgstr "Sett fra venstre" #: src/menus.c:124 msgid "Right View" msgstr "Sett fra høyre" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Et merke er nå satt ved posisjon %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Trekk: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kube løst med %d trekk" msgstr[1] "Kube løst med %d trekk" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Kuben er IKKE løst! Fargene stemmer, men har feil orientering" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Animasjonsrate satt til %d bilde per omdreining." msgstr[1] "Animasjonsrate satt til %d bilder per omdreining." #: src/menus.c:228 msgid "_Game" msgstr "_Spill" #: src/menus.c:229 msgid "_View" msgstr "Visning" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Legg til visning" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Legg til en ekstra visning av kuben" #: src/menus.c:235 msgid "_Help" msgstr "_Hjelp" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "Vis/skjul" #: src/menus.c:237 msgid "_Scripts" msgstr "Skript" #: src/menus.c:307 msgid "_Restart Game" msgstr "Start spill på nytt" #: src/menus.c:311 msgid "_New Game" msgstr "_Nytt spill" #: src/menus.c:315 msgid "_Rear" msgstr "Bak" #: src/menus.c:317 msgid "_Left" msgstr "VEnstre" #: src/menus.c:319 msgid "Ri_ght" msgstr "Høyre" #: src/menus.c:321 msgid "_Top" msgstr "Topp" #: src/menus.c:323 msgid "_Bottom" msgstr "Bunn" #: src/menus.c:328 msgid "_Colours" msgstr "_Farger" #: src/menus.c:332 msgid "_Animation" msgstr "_Animasjon" #: src/menus.c:336 msgid "_Faster" msgstr "_Fortere" #: src/menus.c:340 msgid "_Slower" msgstr "Saktere" #: src/menus.c:455 msgid "Rewind" msgstr "Spol tilbake" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Gå til forrige merke (eller begynnelsen) i bevegelsessekvensen" #: src/menus.c:462 msgid "Back" msgstr "Tilbake" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Gå ett steg tilbake" #: src/menus.c:468 msgid "Stop" msgstr "Stopp" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Slutt å kjøre bevegelsessekvensen" #: src/menus.c:475 msgid "Mark" msgstr "Marker" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Marker gjeldende sted i bevegelsessekvensen" #: src/menus.c:482 msgid "Forward" msgstr "Forover" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Ta ett steg fremover" #: src/menus.c:488 msgid "Play" msgstr "Spill av" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Kjør frem gjennom bevegelsessekvensen" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik-feil" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "En prøve av fargen. Du kan klikke og velge en ny farge eller trekket et til " "dette området." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf har feil antall kanaler" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf har ukjent fargerom: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "Feilsøke" #: scripts/debug.scm:52 msgid "_Move" msgstr "Flytt" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "Dump tilstand" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "Velg tilfeldig" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Dette skriptet fungerer kun med 3x3x3-kuber." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "Løsningsalgoritmer" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "Hel Kube" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Bunnkantplassering" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Bunnhjørneorientering" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "Bunnhjørneplassering" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "Mitre skife" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "Toppskive" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "Toppkanter" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Et 3D magikubepuslespill" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Kan ikke lage bilde fra fil %s: %s" #~ msgid "Pattern" #~ msgstr "Mønster" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Klikk her for å bruke et mønster på kubens overflate" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Kontrollerer hastigheten som skivene roterer med" #~ msgid "Preferences" #~ msgstr "Innstillinger" #~ msgid "Lighting" #~ msgstr "Belysning" #~ msgid "Enable lighting" #~ msgstr "Aktiver belysning" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Får kuben til å virke opplyst" #~ msgid "Start cube with new settings?" #~ msgstr "Start kube med nytt oppsett?" #~ msgid "/_Game/sep" #~ msgstr "/_Spill/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Spill/_Avslutt" #~ msgid "/_Settings" #~ msgstr "/_Innstillinger" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Innstillinger/_Innstillinger" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Innstillinger/_Farget" #~ msgid "/_Help/_About" #~ msgstr "/_Hjelp/_Om" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Innstillinger" gnubik-2.4.3/po/nl.po0000644000175000017460000002265613070436577011343 00000000000000# Dutch translation for GNUbik. # Copyright (C) 2003-2015 John Darrington. # This file is distributed under the same license as the gnubik package. # # Lidwine van As , 2005. # Erwin Poeze , 2010. # Benno Schulenberg , 2011, 2015. msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-04-11 14:56+0200\n" "Last-Translator: Benno Schulenberg \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.0\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Afbeeldingenkiezer" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Alle afbeeldingen" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Alle bestanden" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Kleurenkiezer" #: src/colour-dialog.c:314 msgid "Image" msgstr "Afbeelding" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Selecteren" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Selecteer een afbeeldingsbestand" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Tegeltjes" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Plaatst de afbeelding op elk vlakje van één kubuszijde" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mozaïek" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Verdeelt de afbeelding over alle vlakjes van een kubuszijde" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Egaal" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Verwijdert de afbeelding van de kubuszijde" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Grootte van de kubus:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "_Gewone kubus" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Stelt het aantal blokken per vlak in" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Staat alleen kubussen toe waarvan alle zijdes even groot zijn" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Een driedimensionale draaikubuspuzzel" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Lidwine van As , 2005;Erwin Poeze , 2010;Benno Schulenberg , 2015." #: src/dialogs.c:189 msgid "New Game" msgstr "Nieuw spel" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Afmetingen" #: src/dialogs.c:212 msgid "Initial position" msgstr "Beginpositie" #: src/dialogs.c:216 msgid "_Random" msgstr "_Willekeurig" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Opgelost" #: src/menus.c:94 msgid "Rear View" msgstr "Achteraanzicht" #: src/menus.c:102 msgid "Bottom View" msgstr "Onderaanzicht" #: src/menus.c:109 msgid "Top View" msgstr "Bovenaanzicht" #: src/menus.c:117 msgid "Left View" msgstr "Linker aanzicht" #: src/menus.c:124 msgid "Right View" msgstr "Rechter aanzicht" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Een markering is gezet op positie %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Aantal stappen: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kubus is in %d stap opgelost." msgstr[1] "Kubus is in %d stappen opgelost." #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Kubus is NIET opgelost! De kleuren zijn goed, maar de schikking is onjuist." #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Animatiesnelheid is ingesteld op %d frame per kwartslag." msgstr[1] "Animatiesnelheid is ingesteld op %d frames per kwartslag." #: src/menus.c:228 msgid "_Game" msgstr "_Spel" #: src/menus.c:229 msgid "_View" msgstr "_Aanzicht" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Aanzicht _toevoegen" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Voegt een hulpaanzicht van de kubus toe." #: src/menus.c:235 msgid "_Help" msgstr "_Hulp" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "_Tonen/Verbergen" #: src/menus.c:237 msgid "_Scripts" msgstr "_Scripts" #: src/menus.c:307 msgid "_Restart Game" msgstr "Spel _herstarten" #: src/menus.c:311 msgid "_New Game" msgstr "_Nieuw spel" #: src/menus.c:315 msgid "_Rear" msgstr "_Achterkant" #: src/menus.c:317 msgid "_Left" msgstr "_Links" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Rechts" #: src/menus.c:321 msgid "_Top" msgstr "_Boven" #: src/menus.c:323 msgid "_Bottom" msgstr "_Onder" #: src/menus.c:328 msgid "_Colours" msgstr "_Kleuren" #: src/menus.c:332 msgid "_Animation" msgstr "_Animatie" #: src/menus.c:336 msgid "_Faster" msgstr "_Sneller" #: src/menus.c:340 msgid "_Slower" msgstr "_Langzamer" #: src/menus.c:455 msgid "Rewind" msgstr "Terugspoelen" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" "Gaat naar de vorige markering in de stappenreeks (of naar het begin ervan)" #: src/menus.c:462 msgid "Back" msgstr "Terug" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Gaat één stap terug" #: src/menus.c:468 msgid "Stop" msgstr "Stoppen" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Stopt het afspelen van de stappenreeks" #: src/menus.c:475 msgid "Mark" msgstr "Markeren" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Markeert de huidige positie in de stappenreeks" #: src/menus.c:482 msgid "Forward" msgstr "Vooruit" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Gaat één stap vooruit" #: src/menus.c:488 msgid "Play" msgstr "Afspelen" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Loopt voorwaarts door de stappenreeks" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik-fout" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Voorbeeld van de gekozen kleur. Selecteer een andere kleur door deze aan te " "klikken of hiernaartoe te slepen." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Afbeelding heeft onjuist aantal kanalen" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Afbeelding heeft onbekende kleurwaarde: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Debuggen" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Bewegen" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "Toestand _dumpen" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Schudden" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Dit script werkt alleen op 3x3x3 kubussen." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Oplossers" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Volledige kubus" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Onder_rand-plaats" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Onder_hoek-richting" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "_Onderhoek-plaats" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "_Middenlaag" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "_Bovenlaag" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "_Bovenranden" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Een 3D draaikubuspuzzel" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Kan geen afbeelding maken van bestand %s: %s" #~ msgid "Pattern" #~ msgstr "Patroon" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Klik hier om een patroon op het kubusoppervlak aan te brengen" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Stelt de draaisnelheid van de schijven in" #~ msgid "Preferences" #~ msgstr "Voorkeuren" #~ msgid "Lighting" #~ msgstr "Belichting" #~ msgid "Enable lighting" #~ msgstr "Belichting activeren" #~ msgid "Makes the cube appear illuminated" #~ msgstr "De kubus lijkt verlicht te worden" #~ msgid "Start cube with new settings?" #~ msgstr "Kubus starten met nieuwe instellingen?" #~ msgid "_Play Toolbar" #~ msgstr "_Afspeelwerkbalk" #~ msgid "_Status Bar" #~ msgstr "Status_balk" #~ msgid "/_Game/_Quit" #~ msgstr "/_Spel/A_fsluiten" #~ msgid "/_Settings" #~ msgstr "/_Instellingen" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Instellingen/_Voorkeuren" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Instellingen/_Kleuren" #~ msgid "/_Help/_About" #~ msgstr "/_Hulp/_Over..." #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Instellingen/Tonen\\/Verbergen" gnubik-2.4.3/po/ro.po0000644000175000017460000002016013070436577011336 00000000000000# Mesajele în limba română pentru gnubik # Copyright (C) 2003 John Darrington # Eugen Hoanca , 2003 # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2003-09-26 07:36+0300\n" "Last-Translator: Eugen Hoanca \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Selector Imagine" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Imagine" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Selector culoare" #: src/colour-dialog.c:314 msgid "Image" msgstr "Imagine" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Se_lectare" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Selectează un fişier imagine" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "Aranjat(_Tiled)" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Plasează o copie a imaginii\n" "pe fiecare bloc" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mozaic" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Plasează o copie a imaginii\n" "pe întreaga faţă a cubului" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Foloseşte un fişier imagine pe faţa cubului" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Mărimea cubului:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Setează numărul de blocuri pe fiecare faţă" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/Joc(_Game)/Joc _Nou" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensiuni" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, fuzzy, c-format msgid "Moves: %d / %d" msgstr "Mutări: %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cub rezolvat în %d mutări" msgstr[1] "Cub rezolvat în %d mutări" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Cubul NU este rezolvat! Culorile sunt corecte, dar au orientare incorectă" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/Joc(_Game)" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/Ajutor(_Help)" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Setări" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/Joc(_Game)/Joc _Nou" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Culoare" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Animaţie" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Mai Rapid" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Mai Încet" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" #: src/menus.c:462 msgid "Back" msgstr "" #: src/menus.c:463 msgid "Make one step backwards" msgstr "" #: src/menus.c:468 msgid "Stop" msgstr "" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "" #: src/menus.c:475 msgid "Mark" msgstr "" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" #: src/menus.c:482 msgid "Forward" msgstr "" #: src/menus.c:483 msgid "Make one step forwards" msgstr "" #: src/menus.c:488 msgid "Play" msgstr "" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Un exemplu de culoare sau model. Puteţi da click şi selecta o culoare sau un " "model nou, sau să trageţi una/unul în acest spaţiu." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf are un număr eronat de canale" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf are spaţiu de culoare necunoscut: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Nu se poate crea imagine din fişierul %s: %s" #~ msgid "Pattern" #~ msgstr "Model" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Daţi click aici pentru a folosi un model pe suprafaţa cubului" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Controlează viteza cu care se vor roti părţile(slices)" #~ msgid "Preferences" #~ msgstr "Preferinţe" #~ msgid "Lighting" #~ msgstr "Iluminare" #~ msgid "Enable lighting" #~ msgstr "Activează iluminarea" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Provoacă apariţia iluminată a cubului" #~ msgid "Start cube with new settings?" #~ msgstr "Începem cubul cu setări noi?" #~ msgid "/_Game/sep" #~ msgstr "/Joc(_Game)/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/Joc(_Game)/_Quit" #~ msgid "/_Settings" #~ msgstr "/_Setări" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Setări/_Preferinţe" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Setări/_Culori" #~ msgid "/_Help/_About" #~ msgstr "/Ajutor(_Help)/Despre(_About)" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Setări" gnubik-2.4.3/po/pl.po0000644000175000017460000002003513070436577011332 00000000000000# Polish messages for GNUbik # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the GNUbik package. # # Sergey Poznyakoff , 2011 # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2011-04-10 12:01+0300\n" "Last-Translator: Sergey Poznyakoff \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Wybór obrazku" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Wszystkie obrazki" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Wszystkie pliki" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Wybór koloru" #: src/colour-dialog.c:314 msgid "Image" msgstr "Obrazek" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Wybór" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Wybiera plik obrazku" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Kafelki" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Rozmieść kopię obrazku na każdym bloku" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mozaika" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Rozmieść kopię obrazku na stronie sześcianu" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Zwykły" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Usuń obrazek ze strony sześcianu" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Rozmiar sześcianu:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "_Zwykły sześcian" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Ustawia liczbę bloków na każdej stronie" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Zezwala tylko na sześciany o jednakowych stronach" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Trójwymiarowa układanka sześcianu" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "Sergey Poznyakoff " #: src/dialogs.c:189 msgid "New Game" msgstr "Nowa gra" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Wymiary" #: src/dialogs.c:212 msgid "Initial position" msgstr "Pozycja początkowa" #: src/dialogs.c:216 msgid "_Random" msgstr "_Losowy" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Ułożony" #: src/menus.c:94 msgid "Rear View" msgstr "Widok z tyłu" #: src/menus.c:102 msgid "Bottom View" msgstr "Widok od dołu" #: src/menus.c:109 msgid "Top View" msgstr "Widok z góry" #: src/menus.c:117 msgid "Left View" msgstr "Widok z lewej" #: src/menus.c:124 msgid "Right View" msgstr "Widok z prawej" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Znacznik został ustawiony w pozycji %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Posunięcia: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Sześcian ułożono za %d posunięcie" msgstr[1] "Sześcian ułożono za %d posunięcia" msgstr[2] "Sześcian ułożono za %d posunięć" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Sześcian NIE został ułożony! Kolory są poprawne, ale błędnie rozmieszczone." #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Tempo animacji ustawione w %d klatkę na obrót." msgstr[1] "Tempo animacji ustawione w %d klatki na obrót." msgstr[2] "Tempo animacji ustawione w %d klatek na obrót." #: src/menus.c:228 msgid "_Game" msgstr "_Gra" #: src/menus.c:229 msgid "_View" msgstr "_Widok" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Dodaj _widok" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Dodaje pomocniczy widok sześcianu" #: src/menus.c:235 msgid "_Help" msgstr "_Pomóc" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "_Pokaż/Ukryj" #: src/menus.c:237 msgid "_Scripts" msgstr "_Skrypty" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Zacznij od nowa" #: src/menus.c:311 msgid "_New Game" msgstr "_Nowa gra" #: src/menus.c:315 msgid "_Rear" msgstr "Z _tyłu" #: src/menus.c:317 msgid "_Left" msgstr "Z _lewej" #: src/menus.c:319 msgid "Ri_ght" msgstr "Z _prawej" #: src/menus.c:321 msgid "_Top" msgstr "Z _góry" #: src/menus.c:323 msgid "_Bottom" msgstr "Od _dołu" #: src/menus.c:328 msgid "_Colours" msgstr "_Kolory" #: src/menus.c:332 msgid "_Animation" msgstr "_Animacja" #: src/menus.c:336 msgid "_Faster" msgstr "_Szybciej" #: src/menus.c:340 msgid "_Slower" msgstr "_Wolniej" #: src/menus.c:455 msgid "Rewind" msgstr "Przewinięńcie" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Przejście do poprzedniego znacznika lub do początku sekwencji posunięć" #: src/menus.c:462 msgid "Back" msgstr "Wstecz" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Jedne posunięcie wstecz" #: src/menus.c:468 msgid "Stop" msgstr "Zatrzymanie" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Zatrzymuje wykonanie sekwencji posunięć" #: src/menus.c:475 msgid "Mark" msgstr "Znacznik" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Zaznacza bieżącą pozycje w sekwencji posunięć" #: src/menus.c:482 msgid "Forward" msgstr "Naprzód" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Jedno posunięcie naprzód" #: src/menus.c:488 msgid "Play" msgstr "Wykonanie" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Wykonanie sekwencji posunięć" #: src/menus.c:555 msgid "Gnubik error" msgstr "Błąd programu" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Wzór koloru. Kliknij i wybierz nowy kolor albo przeciągnij go w to miejsce." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf ma błędną liczbę kanałów" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf ma nieznaną przestrzeń kolorów: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Debugowanie" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Posunięcie" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "_Zrzut stanu" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Randomizacja" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Ten skrypt obsługuje tylko sześciany 3x3x3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Gracze" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Cały sześcian" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Rozmieszczenie dolnego _brzegu" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "_Orientacja dolnego kąta" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "_Rozmieszczenie dolnego _kąta" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "_Przekrój środkowy" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "Przekrój _górny" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "Górne _brzegi" gnubik-2.4.3/po/gl.po0000644000175000017460000001747213070436577011334 00000000000000# Galician translation for gnubik package. # Copyright (C) 2014 John Darrington # This file is distributed under the same license as the gnubik package. # Copyright (C) 2014 Leandro Regueiro. # # Leandro Regueiro , 2014. # # Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas # colaborar connosco, podes atopar máis información en # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2014-05-10 16:56+0100\n" "Last-Translator: Leandro Regueiro \n" "Language-Team: Galician \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Selector de imaxe" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Todas as imaxes" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Todos os ficheiros" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Selector de cor" #: src/colour-dialog.c:314 msgid "Image" msgstr "Imaxe" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Se_leccionar" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Seleccionar un ficheiro de imaxe" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Situar unha copia da imaxe en cada bloque" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Situar unha copia da imaxe en toda a cara do cubo" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Retirar imaxe da cara do cubo" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Tamaño do cubo:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Define o número de bloques en cada cara" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Permitir só cubos con todos os lados de igual tamaño" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Leandro Regueiro , 2014.\n" "\n" "Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas\n" "colaborar connosco, podes atopar máis información en http://www.trasno.net" #: src/dialogs.c:189 msgid "New Game" msgstr "Nova partida" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensións" #: src/dialogs.c:212 msgid "Initial position" msgstr "Posición inicial" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "Vista posterior" #: src/menus.c:102 msgid "Bottom View" msgstr "Vista inferior" #: src/menus.c:109 msgid "Top View" msgstr "Vista superior" #: src/menus.c:117 msgid "Left View" msgstr "Vista esquerda" #: src/menus.c:124 msgid "Right View" msgstr "Vista dereita" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Colocouse unha marca na posición %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Movementos: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cubo resolto en %d movemento" msgstr[1] "Cubo resolto en %d movementos" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "A velocidade da animación púxose a %d fotograma por quenda." msgstr[1] "A velocidade da animación púxose a %d fotogramas por quenda." #: src/menus.c:228 msgid "_Game" msgstr "_Xogo" #: src/menus.c:229 msgid "_View" msgstr "_Vista" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Engadir _vista" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Engadir unha vista auxiliar do cubo" #: src/menus.c:235 msgid "_Help" msgstr "A_xuda" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "_Mostrar/Ocultar" #: src/menus.c:237 msgid "_Scripts" msgstr "_Scripts" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Reiniciar a partida" #: src/menus.c:311 msgid "_New Game" msgstr "_Nova partida" #: src/menus.c:315 msgid "_Rear" msgstr "_Posterior" #: src/menus.c:317 msgid "_Left" msgstr "_Esquerda" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Dereita" #: src/menus.c:321 msgid "_Top" msgstr "_Superior" #: src/menus.c:323 msgid "_Bottom" msgstr "_Inferior" #: src/menus.c:328 msgid "_Colours" msgstr "_Cores" #: src/menus.c:332 msgid "_Animation" msgstr "_Animación" #: src/menus.c:336 msgid "_Faster" msgstr "_Máis rápido" #: src/menus.c:340 msgid "_Slower" msgstr "_Máis a modo" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Ir á marca anterior (ou ao comezo) da secuencia de movementos" #: src/menus.c:462 msgid "Back" msgstr "Atrás" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Retroceder un paso" #: src/menus.c:468 msgid "Stop" msgstr "Deter" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Deter a reprodución da secuencia de movementos" #: src/menus.c:475 msgid "Mark" msgstr "Marcar" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Marcar o lugar actual na secuencia de movementos" #: src/menus.c:482 msgid "Forward" msgstr "Avanzar" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Avanzar un paso" #: src/menus.c:488 msgid "Play" msgstr "Reproducir" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 msgid "Gnubik error" msgstr "Erro de Gnubik" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Unha mostra da cor. Pode premer e seleccionar unha nova cor, ou arrastrar " "unha a este espazo." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Depuración" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Mover" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Este script só funciona en cubos 3×3×3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" gnubik-2.4.3/po/Makefile.in0000644000175000017460000000063313070435673012422 00000000000000# This is a dummy Makefile to reassure Automake. # We use our own non-recursive makefile to build the po directory TARGETS = all distdir install install-data install-exec uninstall \ install-dvi install-html install-info install-ps install-pdf \ installdirs check installcheck mostlyclean clean distclean \ maintainer-clean dvi pdf ps info html tags ctags $(TARGETS): @# Nothing to do. .PHONY: $(TARGETS) gnubik-2.4.3/po/zh_CN.po0000644000175000017460000002157013070436577011725 00000000000000# Chinese/Simplified translations for GNUbik # Copyright (C) 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # LI Daobing , 2007. # Mingye Wang , 2015. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-08-28 15:22+0800\n" "Last-Translator: Mingye Wang \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.8.4\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "选择图片" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "所有图片" #: src/colour-dialog.c:214 msgid "All Files" msgstr "所有文件" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "选择颜色" #: src/colour-dialog.c:314 msgid "Image" msgstr "图片" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "打开图片文件 (_l)" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "选择图片文件" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "排列 (_t)" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "在每个小块上放一份图片" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "马赛克 (_m)" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "将图片放在魔方的整个面上" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "从魔方表面移除图片" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "魔方大小:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "普通魔方 (_G)" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "设置每个边的块数" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "只允许各边相等的魔方" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "一个三维魔方游戏" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "zh_CN\tMingye Wang , 2015.\n" "\tLI Daobing , 2007." #: src/dialogs.c:189 msgid "New Game" msgstr "New Game" #: src/dialogs.c:201 msgid "Dimensions" msgstr "大小" #: src/dialogs.c:212 msgid "Initial position" msgstr "初始位置" #: src/dialogs.c:216 msgid "_Random" msgstr "随机 (_R)" #: src/dialogs.c:220 msgid "_Solved" msgstr "解决 (_S)" #: src/menus.c:94 msgid "Rear View" msgstr "后视图" #: src/menus.c:102 msgid "Bottom View" msgstr "底视图" #: src/menus.c:109 msgid "Top View" msgstr "俯视图" #: src/menus.c:117 msgid "Left View" msgstr "左视图" #: src/menus.c:124 msgid "Right View" msgstr "右视图" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "标记已在位置 %d 放置。" #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "移动: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "魔方在 %d 次移动后被解决。" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "魔方未完成! 颜色正确,但方向错误。" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "动画速率设置为每回合 %d 帧。" #: src/menus.c:228 msgid "_Game" msgstr "游戏 (_G)" #: src/menus.c:229 msgid "_View" msgstr "视图 (_V)" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "添加视图 (_V)" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "添加一个魔方的辅助视图" #: src/menus.c:235 msgid "_Help" msgstr "帮助 (_H)" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "显示/隐藏 (_W)" #: src/menus.c:237 msgid "_Scripts" msgstr "脚本 (_S)" #: src/menus.c:307 msgid "_Restart Game" msgstr "重新开始 (_R)" #: src/menus.c:311 msgid "_New Game" msgstr "新建游戏 (_N)" #: src/menus.c:315 msgid "_Rear" msgstr "后 (_R)" #: src/menus.c:317 msgid "_Left" msgstr "左 (_L)" #: src/menus.c:319 msgid "Ri_ght" msgstr "右 (_G)" #: src/menus.c:321 msgid "_Top" msgstr "顶 (_T)" #: src/menus.c:323 msgid "_Bottom" msgstr "底 (_B)" #: src/menus.c:328 msgid "_Colours" msgstr "颜色 (_C)" #: src/menus.c:332 msgid "_Animation" msgstr "动画 (_A)" #: src/menus.c:336 msgid "_Faster" msgstr "加快 (_F)" #: src/menus.c:340 msgid "_Slower" msgstr "减慢 (_S)" #: src/menus.c:455 msgid "Rewind" msgstr "回退" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "回到上个标记点 (或者开始位置)" #: src/menus.c:462 msgid "Back" msgstr "后退" #: src/menus.c:463 msgid "Make one step backwards" msgstr "后退一步" #: src/menus.c:468 msgid "Stop" msgstr "停止" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "停止移动" #: src/menus.c:475 msgid "Mark" msgstr "标记" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "标记当前位置" #: src/menus.c:482 msgid "Forward" msgstr "前进" #: src/menus.c:483 msgid "Make one step forwards" msgstr "前进一步" #: src/menus.c:488 msgid "Play" msgstr "最后" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "一直向前" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik 错误" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "颜色范例。点击此处选择新的颜色,或者拖拽一个到此处。" #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf的通道数错误" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf 有未知的颜色数: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "调试 (_D)" #: scripts/debug.scm:52 msgid "_Move" msgstr "移动 (_M)" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "转存状态 (_D)" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "打乱 (_R)" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "(_~a)" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "此脚本只对 3x3x3 魔方有效。" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "求解器 (_S)" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3x3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "完全魔方 (_F)" #: scripts/mellor-solve.scm:407 #, fuzzy msgid "Bottom _edge place" msgstr "底边放置 (_E)" #: scripts/mellor-solve.scm:410 #, fuzzy msgid "Bottom _corner orient" msgstr "底角方向 (_C)" #: scripts/mellor-solve.scm:413 #, fuzzy msgid "_Bottom corner place" msgstr "底角放置 (_B)" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "中层切片 (_M)" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "顶层切片 (_T)" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "顶边 (_T)" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "一个 3D 魔方游戏" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "无法从文件 %s 生成图片: %s" #~ msgid "Pattern" #~ msgstr "模式" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "点这里将模式应用到魔方表面" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "调整动画速度" #~ msgid "Preferences" #~ msgstr "选项" #~ msgid "Lighting" #~ msgstr "光影效果" #~ msgid "Enable lighting" #~ msgstr "打开光影效果" #~ msgid "Makes the cube appear illuminated" #~ msgstr "让魔方具有光照效果" #~ msgid "Start cube with new settings?" #~ msgstr "用新的设置启动魔方?" #~ msgid "_Play Toolbar" #~ msgstr "工具栏(_p)" #~ msgid "_Status Bar" #~ msgstr "状态栏(_s)" #~ msgid "/_Game/sep" #~ msgstr "/游戏(_g)/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/游戏(_g)/退出(_q)" #~ msgid "/_Settings" #~ msgstr "/设置(_s)" #~ msgid "/_Settings/_Preferences" #~ msgstr "/设置(_s)/选项(_p)" #~ msgid "/_Settings/_Colours" #~ msgstr "/设置(_s)/颜色(_c)" #~ msgid "/_Help/_About" #~ msgstr "/帮助(_h)/关于(_a)" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/设置/显示\\/隐藏" gnubik-2.4.3/po/en_US.po0000644000175000017460000001443013070436577011732 00000000000000# American translations for GNUbik (mainly the word colour/color) # Copyright (C) 2003, 2011 John Darrington # John Darrington , 2003, 2011. # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.4\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-03-13 17:42+0100\n" "PO-Revision-Date: 2011-03-13 17:55+0100\n" "Last-Translator: John Darrington \n" "Language-Team: American \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Color selector" #: src/colour-dialog.c:314 msgid "Image" msgstr "" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "John Darrington" #: src/dialogs.c:189 msgid "New Game" msgstr "" #: src/dialogs.c:201 msgid "Dimensions" msgstr "" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "" msgstr[1] "" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Cube is NOT solved! The colors are correct, but have incorrect orientation" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 msgid "_Game" msgstr "" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 msgid "_Help" msgstr "" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 msgid "_New Game" msgstr "" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 msgid "_Colours" msgstr "_Colors" #: src/menus.c:332 msgid "_Animation" msgstr "" #: src/menus.c:336 msgid "_Faster" msgstr "" #: src/menus.c:340 msgid "_Slower" msgstr "" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" #: src/menus.c:462 msgid "Back" msgstr "" #: src/menus.c:463 msgid "Make one step backwards" msgstr "" #: src/menus.c:468 msgid "Stop" msgstr "" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "" #: src/menus.c:475 msgid "Mark" msgstr "" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" #: src/menus.c:482 msgid "Forward" msgstr "" #: src/menus.c:483 msgid "Make one step forwards" msgstr "" #: src/menus.c:488 msgid "Play" msgstr "" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "A sample of the color. You can click and select a new color, or drag one to " "this space." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Colour" #~ msgstr "Color" gnubik-2.4.3/po/eo.po0000644000175000017460000001776013070436577011335 00000000000000# Esperanto translation. # Copyright (C) 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # Felipe Castro , 2011, 2015. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-05-31 09:58-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "X-Generator: Poedit 1.6.10\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Bildo-Elektilo" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Ĉiuj Bildoj" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Ĉiuj Dosieroj" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Kolor-elektilo" #: src/colour-dialog.c:314 msgid "Image" msgstr "Bildo" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "E_lekti" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Elekti bildan dosieron" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Kahele" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Meti kopion de la bildo en ĉiu bloko" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mozaike" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Meti kopion de la bildo tra la tuta faco de la kubo" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Plate" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Forigi bildon el la kuba faco" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Kubo-grando:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Re_gula kubo" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Difinas la nombro da blokoj en ĉiu faco" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Permesi nur kubojn kun ĉiuj facoj egale grandaj" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Puzlo de 3-dimensia magia kubo" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "Felipe Castro" #: src/dialogs.c:189 msgid "New Game" msgstr "Nova Maĉo" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensioj" #: src/dialogs.c:212 msgid "Initial position" msgstr "Komenca pozicio" #: src/dialogs.c:216 msgid "_Random" msgstr "_Hazarde" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Solvite" #: src/menus.c:94 msgid "Rear View" msgstr "Retro-Rigardo" #: src/menus.c:102 msgid "Bottom View" msgstr "Malsupra-Rigardo" #: src/menus.c:109 msgid "Top View" msgstr "Supra-Rigardo" #: src/menus.c:117 msgid "Left View" msgstr "Maldekstra-Rigardo" #: src/menus.c:124 msgid "Right View" msgstr "Dekstra-Rigardo" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Marko nun estas difinita ĉe pozicio %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Movoj: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kubo solvita en %d movo" msgstr[1] "Kubo solvita en %d movoj" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "La kubo NE estas solvita! La koloroj estas korektaj, sed kun malĝusta " "orientiĝo" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Animacia rapideco difinita je %d kadro por turno." msgstr[1] "Animacia rapideco difinita je %d kadroj por turno." #: src/menus.c:228 msgid "_Game" msgstr "_Maĉo" #: src/menus.c:229 msgid "_View" msgstr "_Rigardo" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Aldoni _Rigardon" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Aldoni helpan rigardon al la kubo" #: src/menus.c:235 msgid "_Help" msgstr "_Helpo" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "Mon_tri/Kaŝi" #: src/menus.c:237 msgid "_Scripts" msgstr "_Skriptoj" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Rekomencigi Maĉon" #: src/menus.c:311 msgid "_New Game" msgstr "_Nova Maĉo" #: src/menus.c:315 msgid "_Rear" msgstr "_Retroe" #: src/menus.c:317 msgid "_Left" msgstr "_Maldekstre" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Dekstre" #: src/menus.c:321 msgid "_Top" msgstr "_Supre" #: src/menus.c:323 msgid "_Bottom" msgstr "Malsu_pre" #: src/menus.c:328 msgid "_Colours" msgstr "_Koloroj" #: src/menus.c:332 msgid "_Animation" msgstr "_Animacio" #: src/menus.c:336 msgid "_Faster" msgstr "Pli_rapide" #: src/menus.c:340 msgid "_Slower" msgstr "Malplirapi_de" #: src/menus.c:455 msgid "Rewind" msgstr "Retroigi" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Iri al la antaŭa marko (aŭ al la komenco) de la sekvo de movoj" #: src/menus.c:462 msgid "Back" msgstr "Malantaŭen" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Fari unu paŝon malantaŭen" #: src/menus.c:468 msgid "Stop" msgstr "Halti" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Halti ludadi la sekvon de movoj" #: src/menus.c:475 msgid "Mark" msgstr "Marki" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Marki la nunan lokon en la sekvo de movoj" #: src/menus.c:482 msgid "Forward" msgstr "Antaŭen" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Fari unu paŝon antaŭen" #: src/menus.c:488 msgid "Play" msgstr "Ludi" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Pluiri antaŭen tra la sekvoj de movoj" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik-eraro" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Specimeno de la koloro. Vi povas klaki kaj elekti novan koloron, aŭ treni " "unu al tiu ĉi spaco." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Bilderbufro havas malĝustan nombron da kanaloj" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Bilderbufro havas nekonatan kolorspacon: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Rafini" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Movi" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "Ŝ_uti staton" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Malordigi" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Tiu ĉi skripto nur traktas kubojn 3×3×3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Solviloj" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Tuta kubo" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Malsupra _eĝa loko" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Malsupra _angula oriento" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "_Malsupra angula loko" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "Me_za segmento" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "_Supra segmento" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "Su_praj eĝoj" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Puzlo de magia kubo 3-dimensia" #~ msgid "_Animated" #~ msgstr "_Animacie" #~ msgid "_Fast" #~ msgstr "_Rapide" gnubik-2.4.3/po/tr.po0000644000175000017460000002010213070436577011337 00000000000000# Turkish translations for GNUbik # Copyright (C) 2003 John Darrington # John Darrington , 2003. # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2003-07-28 10:38+0800\n" "Last-Translator: Gorkem Cetin \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=0;\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Resim Seçici" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Resim" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Renk seçici" #: src/colour-dialog.c:314 msgid "Image" msgstr "Resim" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Seç" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Bir resim dosyası seçin" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Döşeli" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Resmin bir kopyasını her\n" "blok üzerine kopyala" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mozaik" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Resmin bir kopyasını kübün\n" "tüm yüzüne kopyala" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Küp yüzünde resim kullan" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Kübün boyutu:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Her yüzdeki blok sayısını gösterir" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Oyun/_Yeni Oyun" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Boyutlar" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, fuzzy, c-format msgid "Moves: %d / %d" msgstr "Hareket: %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Problem %d harekette çözüldü" msgstr[1] "Problem %d harekette çözüldü" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Küp çözülmedi! Renkler doğru, ancak konumlandırma hatalı" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Oyun" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_Yardım" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Ayarlar" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Oyun/_Yeni Oyun" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Renk" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Canlandırma" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Daha hızlı" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Daha yavaş" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" #: src/menus.c:462 msgid "Back" msgstr "" #: src/menus.c:463 msgid "Make one step backwards" msgstr "" #: src/menus.c:468 msgid "Stop" msgstr "" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "" #: src/menus.c:475 msgid "Mark" msgstr "" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" #: src/menus.c:482 msgid "Forward" msgstr "" #: src/menus.c:483 msgid "Make one step forwards" msgstr "" #: src/menus.c:488 msgid "Play" msgstr "" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 #, fuzzy msgid "Gnubik error" msgstr "GNUbik Hatası" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Renk ya da desenin bir örneği. Renk ya da desenin üzerine tıklayıp seçim " "yapabilir, ya da bu bölüme sürükleyip bırakabilirsiniz." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf içinde hatalı sayıda kanal var" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf içinde bilinmeyen renk düzlemi var: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "%s dosyasından resim oluşturulamıyor: %s" #~ msgid "Pattern" #~ msgstr "Desen" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Küp üzerinde bir desen kullanmak için burayı tıklatın" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Dönüş hızını kontrol eder" #~ msgid "Preferences" #~ msgstr "Tercihler" #~ msgid "Lighting" #~ msgstr "Işıklandırma" #~ msgid "Enable lighting" #~ msgstr "Işıklandırmayı etkinleştir" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Kübün aydınlık görünmesini sağlar" #~ msgid "Start cube with new settings?" #~ msgstr "Küp, yeni ayarlarla yeniden gösterilsin mi?" #~ msgid "/_Game/sep" #~ msgstr "/_Oyun/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Oyun/Çı_k" #~ msgid "/_Settings" #~ msgstr "/_Ayarlar" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Ayarlar/_Tercihler" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Ayarlar/_Renkler" #~ msgid "/_Help/_About" #~ msgstr "/_Yardım/_Hakkında" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Ayarlar" #~ msgid "R_eset" #~ msgstr "_Sıfırla" gnubik-2.4.3/po/sv.po0000644000175000017460000002235113070436577011352 00000000000000# Swedish translation of gnubik. # Copyright (C) 2006, 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # Daniel Nylander , 2006, 2010. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-11-08 17:55+0100\n" "Last-Translator: Sebastian Rasmussen \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Poedit 1.8.6\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Bildväljare" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Alla bilder" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Alla filer" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Färgväljare" #: src/colour-dialog.c:314 msgid "Image" msgstr "Bild" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Vä_lj" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Välj en bildfil" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Plattsatt" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Placera en kopia av bilden på varje block" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaik" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Placera en kopia av bilden på hela kubens yta" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Standard" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Ta bort bild från kubens yta" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Kubens storlek:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "_Vanlig kub" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Sätt antal block på varje sida" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Tillåt bara kuber med alla sidor i samma storlek" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Ett tredimensionellt magisk-kub-pussel" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Daniel Nylander \n" "Sebastian Rasmussen \n" "\n" "Skicka synpunkter på översättningen till\n" "." #: src/dialogs.c:189 msgid "New Game" msgstr "Nytt spel" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensioner" #: src/dialogs.c:212 msgid "Initial position" msgstr "Startposition" #: src/dialogs.c:216 msgid "_Random" msgstr "_Slumpmässig" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Löst" #: src/menus.c:94 msgid "Rear View" msgstr "Vy bakifrån" #: src/menus.c:102 msgid "Bottom View" msgstr "Vy underifrån" #: src/menus.c:109 msgid "Top View" msgstr "Vy ovanifrån" #: src/menus.c:117 msgid "Left View" msgstr "Vy från vänster" #: src/menus.c:124 msgid "Right View" msgstr "Vy från höger" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Ett märke är nu satt på position %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Vridningar: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kuben löst i %d vridning" msgstr[1] "Kuben löst i %d vridningar" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Kuben är INTE löst! Färgerna är korrekta men har inkorrekt orientering" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Animeringshastighet inställd på %d bildruta per omgång." msgstr[1] "Animeringshastighet inställd på %d bildrutor per omgång." #: src/menus.c:228 msgid "_Game" msgstr "_Spel" #: src/menus.c:229 msgid "_View" msgstr "_Vy" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Lägg till _Vy" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Lägg till en hjälpvy av kuben" #: src/menus.c:235 msgid "_Help" msgstr "_Hjälp" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "Vi_sa/Göm" #: src/menus.c:237 msgid "_Scripts" msgstr "_Skript" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Starta om spelet" #: src/menus.c:311 msgid "_New Game" msgstr "_Nytt spel" #: src/menus.c:315 msgid "_Rear" msgstr "_Baksida" #: src/menus.c:317 msgid "_Left" msgstr "_Vänster" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Höger" #: src/menus.c:321 msgid "_Top" msgstr "_Topp" #: src/menus.c:323 msgid "_Bottom" msgstr "Bo_tten" #: src/menus.c:328 msgid "_Colours" msgstr "_Färger" #: src/menus.c:332 msgid "_Animation" msgstr "_Animering" #: src/menus.c:336 msgid "_Faster" msgstr "_Snabbare" #: src/menus.c:340 msgid "_Slower" msgstr "_Långsammare" #: src/menus.c:455 msgid "Rewind" msgstr "Spola bakåt" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Gå till föregående markering (eller början) av vridningssekvensen" #: src/menus.c:462 msgid "Back" msgstr "Tillbaka" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Gå ett steg bakåt" #: src/menus.c:468 msgid "Stop" msgstr "Stopp" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Stoppa körning av vridningssekvensen" #: src/menus.c:475 msgid "Mark" msgstr "Markera" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Markera nuvarande plats i vridningssekvensen" #: src/menus.c:482 msgid "Forward" msgstr "Framåt" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Gå ett steg framåt" #: src/menus.c:488 msgid "Play" msgstr "Spela" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Kör framåt genom vridningssekvensen" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik-fel" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Ett test av färgen. Du kan klicka och välja en ny färg, eller dra en till " "denna ruta." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf har fel antal kanaler" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf har okänd färgrymd: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Felsökning" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Flytta" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "_Mata ut tillstånd" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Slumpa" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Detta skript fungerar bara med 3×3×3-kuber." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Lösare" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Fullständig kub" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Botten_kantsplacering" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Bottenhörns_orientering" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "Bottenhörns_placering" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "Mellan_skiva" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "_Toppenskiva" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "_Toppkanter" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Ett magisk-kub-pussel i 3D" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Kan inte skapa bild från filen %s: %s" #~ msgid "Pattern" #~ msgstr "Mönster" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Klicka här för att använda ett mönster på kubens yta" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Kontrollerar hastigheten som delarna roterar med" #~ msgid "Preferences" #~ msgstr "Inställningar" #~ msgid "Lighting" #~ msgstr "Belysning" #~ msgid "Enable lighting" #~ msgstr "Aktivera belysning" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Gör att kuben verkar upplyst" #~ msgid "Start cube with new settings?" #~ msgstr "Starta kub med nya inställningar?" #~ msgid "_Play Toolbar" #~ msgstr "_Kontrollrad" #~ msgid "_Status Bar" #~ msgstr "S_tatusrad" #~ msgid "/_Game/sep" #~ msgstr "/_Spel/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Spel/_Avsluta" #~ msgid "/_Settings" #~ msgstr "/_Inställningar" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Inställningar/_Inställningar" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Inställningar/_Färger" #~ msgid "/_Help/_About" #~ msgstr "/_Hjälp/_Om" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Inställningar/Visa\\/Dölj" gnubik-2.4.3/po/he.po0000644000175000017460000002077213070436577011323 00000000000000# translation of GNUbik to Hebrew # Copyright (C) 2003 John Darrington # John Darrington , 2003. # Gil 'Dolfin' Osher , 2003 # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2003-08-02 12:49+0300\n" "Last-Translator: Gil 'Dolfin' Osher \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.0.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "בוחר תמונה" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "תמונה" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "בוחר צבע" #: src/colour-dialog.c:314 msgid "Image" msgstr "תמונה" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_בחר" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "בחר קובץ תמונה" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_פרוש" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "שים העתק של התמונה\n" "בכל בלוק" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "פ_סיפס" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "שים העתק של התמונה על-פני\n" "כל משטח הקובייה" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "השתמש בקובץ תמונה על פני הקובייה" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "גודל הקובייה:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "קבע את מספר הבלוקים בכל צד" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_משחק/משחק _חדש" #: src/dialogs.c:201 msgid "Dimensions" msgstr "ממדים" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, fuzzy, c-format msgid "Moves: %d / %d" msgstr "תזוזות: %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "הקובייה נפתרה ב %d תזוזות" msgstr[1] "הקובייה נפתרה ב %d תזוזות" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "הקובייה לא נפתרה! הצבעים נכונים, איך יש להם יישור לא נכון" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_משחק" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_עזרה" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_הגדרות" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_משחק/משחק _חדש" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "צבע" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "הנפשה" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "מהיר יותר" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "איטי יותר" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" #: src/menus.c:462 msgid "Back" msgstr "" #: src/menus.c:463 msgid "Make one step backwards" msgstr "" #: src/menus.c:468 msgid "Stop" msgstr "" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "" #: src/menus.c:475 msgid "Mark" msgstr "" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" #: src/menus.c:482 msgid "Forward" msgstr "" #: src/menus.c:483 msgid "Make one step forwards" msgstr "" #: src/menus.c:488 msgid "Play" msgstr "" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 #, fuzzy msgid "Gnubik error" msgstr "שגיאת GNUbik" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "דוגמה של הצבע או הדוגמה. אתה יכול ללחוץ ולבחור צבע חדש או דוגמה, או לגרור " "אחת למרווח זה." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "ל Pixbuf יש מספר שגוי של ערוצים" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "ל Pixbuf יש מרווח צבעים לא ידוע: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "לא ניתן ליצור תמונה מהקובץ %s: %s" #~ msgid "Pattern" #~ msgstr "דוגמה" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "לחץ כאן כדי להשתמש בדוגמה על משטח הקובייה" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "שולט במהירות בה החתיכות מסתובבות" #~ msgid "Preferences" #~ msgstr "העדפות" #~ msgid "Lighting" #~ msgstr "תאורה" #~ msgid "Enable lighting" #~ msgstr "אפשר תאורה" #~ msgid "Makes the cube appear illuminated" #~ msgstr "עושה שהקובייה תראה מוארת" #~ msgid "Start cube with new settings?" #~ msgstr "להתחיל קובייה עם ההגדרות החדשות?" #~ msgid "/_Game/sep" #~ msgstr "/_משחק/מרווח" #~ msgid "/_Game/_Quit" #~ msgstr "/_משחק/_יציאה" #~ msgid "/_Settings" #~ msgstr "/_הגדרות" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_הגדרות/_העדפות" #~ msgid "/_Settings/_Colours" #~ msgstr "/_הגדרות/_צבעים" #~ msgid "/_Help/_About" #~ msgstr "/_עזרה/_אודות" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_הגדרות" #~ msgid "R_eset" #~ msgstr "_קבע מחדש" gnubik-2.4.3/po/sl.po0000644000175000017460000002273013070436577011341 00000000000000# Slovenian translation for gnubik. # Copyright (C) 2011 John Darrington. # This file is distributed under the same license as the gnubik package. # Klemen Košir , 2011. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-03-09 11:00+0100\n" "PO-Revision-Date: 2011-04-09 09:50+0100\n" "Last-Translator: Klemen Košir \n" "Language-Team: Slovenian \n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n" "%100==4 ? 3 : 0);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Izbirnik slik" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Vse slike" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Vse datoteke" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Izbirnik barv" #: src/colour-dialog.c:314 msgid "Image" msgstr "Slika" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Iz_beri" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Izberite slikovno datoteko" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Razpostavljeno" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Postavi kopijo slike na vsako polje" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mozaik" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Postavi kopijo slike čez celotno ploskev kocke" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Običajno" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Odstrani sliko s ploskve kocke" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Velikost kocke:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "_Navadna kocka" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Nastavi število kockic na vsaki strani" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Dovoli samo kocke, ki imajo vse stranice enako velike" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Sestavljanka s čarobno tridimenzionalno kocko" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "Klemen Košir " #: src/dialogs.c:189 msgid "New Game" msgstr "Nova igra" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Mere" #: src/dialogs.c:212 msgid "Initial position" msgstr "Začetni položaj" #: src/dialogs.c:216 msgid "_Random" msgstr "_Naključno" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Rešena kocka" #: src/menus.c:94 msgid "Rear View" msgstr "Pogled z zadnje strani" #: src/menus.c:102 msgid "Bottom View" msgstr "Pogled s spodnje strani" #: src/menus.c:109 msgid "Top View" msgstr "Pogled z zgornje strani" #: src/menus.c:117 msgid "Left View" msgstr "Pogled z leve strani" #: src/menus.c:124 msgid "Right View" msgstr "Pogled z desne strani" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Oznaka je nastavljena na položaju %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Premiki: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kocka je bila rešena v %d premikih" msgstr[1] "Kocka je bila rešena v %d premiku" msgstr[2] "Kocka je bila rešena v %d premikih" msgstr[3] "Kocka je bila rešena v %d premikih" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Kocka NI rešena! Barve so pravilne, vendar imajo napačno usmerjenost" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Hitrost animacije je nastavljena na %d sličic na obrat." msgstr[1] "Hitrost animacije je nastavljena na %d sličico na obrat." msgstr[2] "Hitrost animacije je nastavljena na %d sličici na obrat." msgstr[3] "Hitrost animacije je nastavljena na %d sličice na obrat." #: src/menus.c:228 msgid "_Game" msgstr "_Igra" #: src/menus.c:229 msgid "_View" msgstr "_Pogled" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Dodaj _pogled" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Dodaj pomožen pogled kocke" #: src/menus.c:235 msgid "_Help" msgstr "Pomo_č" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "_Pokaži/Skrij" #: src/menus.c:237 msgid "_Scripts" msgstr "_Skripti" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Začni znova" #: src/menus.c:311 msgid "_New Game" msgstr "_Nova igra" #: src/menus.c:315 msgid "_Rear" msgstr "_Zadaj" #: src/menus.c:317 msgid "_Left" msgstr "_Levo" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Desno" #: src/menus.c:321 msgid "_Top" msgstr "_Zgoraj" #: src/menus.c:323 msgid "_Bottom" msgstr "_Spodaj" #: src/menus.c:328 msgid "_Colours" msgstr "_Barve" #: src/menus.c:332 msgid "_Animation" msgstr "_Animacija" #: src/menus.c:336 msgid "_Faster" msgstr "_Hitreje" #: src/menus.c:340 msgid "_Slower" msgstr "_Počasneje" #: src/menus.c:455 msgid "Rewind" msgstr "Previj" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Vrni se na prejšnjo oznako (ali začetek) zaporedja premikov" #: src/menus.c:462 msgid "Back" msgstr "Nazaj" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Premakni se za en korak nazaj" #: src/menus.c:468 msgid "Stop" msgstr "Zaustavi" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Zaustavi predvajanje zaporedja premikov" #: src/menus.c:475 msgid "Mark" msgstr "Označi" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Označi trenutno mesto v zaporedju premikov" #: src/menus.c:482 msgid "Forward" msgstr "Naprej" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Premakni se za en korak naprej" #: src/menus.c:488 msgid "Play" msgstr "Predvajaj" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Predvajaj zaporedje premikov" #: src/menus.c:555 msgid "Gnubik error" msgstr "Napaka Gnubik" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Vzorec barve. Tukaj lahko kliknete in izberete novo barvo, ali pa jo v to " "polje premaknete." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Medpomnilnik sličic ima napačno število kanalov" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf ima neznan barvni prostor: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Razhroščevanje" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Premakni" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "_Odloži stanje" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Naključno" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Ta skript deluje samo na kockah 3×3×3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Reševalniki" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Polna kocka" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Položaj spodnjih _robov" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Usmerjenost spodnjih _kotov" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "Položaj _spodnjih kotov" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "_Srednja plast" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "_Zgornja plast" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "_Zgornji koti" #~ msgid "_Animated" #~ msgstr "_Animirano" #~ msgid "_Fast" #~ msgstr "_Hitro" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Slike iz datoteke %s ni mogoče ustvariti: %s" #~ msgid "Pattern" #~ msgstr "Vzorec" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Če želite na površini kocke uporabiti vzorec, kliknite sem" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Nadzoruje hitrost vrtenja plasti, vrstic in stolpcev" #~ msgid "Preferences" #~ msgstr "Možnosti" #~ msgid "Lighting" #~ msgstr "Osvetljevanje" #~ msgid "Enable lighting" #~ msgstr "Omogoči osvetljevanje" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Osvetli kocko" #~ msgid "Start cube with new settings?" #~ msgstr "Ali želite začeti kocko z novimi nastavitvami?" #~ msgid "_Play Toolbar" #~ msgstr "Orodna vrstica" #~ msgid "_Status Bar" #~ msgstr "Vrstica _stanja" #~ msgid "/_Game/sep" #~ msgstr "/_Igra/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/I_gra/_Končaj" #~ msgid "/_Settings" #~ msgstr "/Na_stavitve" #~ msgid "/_Settings/_Preferences" #~ msgstr "/Na_stavitve/_Možnosti" #~ msgid "/_Settings/_Colours" #~ msgstr "/Na_stavitve/_Barve" #~ msgid "/_Help/_About" #~ msgstr "/Pomo_č/_O programu" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Nastavitve/Pokaži\\/Skrij" gnubik-2.4.3/po/pt.po0000644000175000017460000002123113070436577011341 00000000000000# Portuguese (pt_PT) translations for GNUbik # Copyright (C) 2003 John Darrington # John Darrington , 2003. # Translators: # Daniel Marujo , 2007 # João Fernando Ferreira , 2007 # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2003-07-28 10:38+0800\n" "Last-Translator: Daniel Marujo , João Fernando " "Ferreira \n" "Language-Team: Portuguese ,\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Seleccionar Imagem" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Imagem" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Seleccionar Cor" #: src/colour-dialog.c:314 msgid "Image" msgstr "Imagem" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Se_leccionar" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Seleccione uma imagem" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "Mosaico" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Colocar uma cópia da imagem\n" "em cada bloco" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Dividida" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Colocar uma cópia da imagem\n" "em toda a face do cubo" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Use uma imagem na face do cubo" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Tamanho do cubo:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Define o número de blocos em cada lado" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Jogo/_Novo Jogo" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensões" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Movimentos: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cubo resolvido em %d movimento" msgstr[1] "Cubo resolvido em %d movimentos" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "O cubo NÃO está resolvido! As cores estão correctas, mas a orientação está " "incorrecta" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Jogo" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_Ajuda" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Definições/_Mostrar\\/Esconder" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Jogo/_Novo Jogo" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Cor" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Animação" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Mais rápida" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Mais lenta" #: src/menus.c:455 msgid "Rewind" msgstr "Retroceder" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Ir para a última posição marcada (ou para o início)" #: src/menus.c:462 msgid "Back" msgstr "Voltar" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Retroceder um passo" #: src/menus.c:468 msgid "Stop" msgstr "Parar" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Parar a sequência de movimentos" #: src/menus.c:475 msgid "Mark" msgstr "Marcar" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Marcar a posição actual na sequência de movimentos" #: src/menus.c:482 msgid "Forward" msgstr "Avançar" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Avançar um passo" #: src/menus.c:488 msgid "Play" msgstr "Jogar" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Avançar através da sequência de movimentos" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Amostra de cor ou padrão. Pode clicar e seleccionar uma nova cor ou padrão. " "Também pode arrastar uma cor para este espaço." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf tem um número de canais incorrecto" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf tem uma paleta de cores desconhecida: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Impossível criar imagem a partir do ficheiro %s: %s" #~ msgid "Pattern" #~ msgstr "Padrão" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Clique aqui para usar um padrão na superfície do cubo" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Controlar a velocidade de rotação de cada secção" #~ msgid "Preferences" #~ msgstr "Preferências" #~ msgid "Lighting" #~ msgstr "Iluminação" #~ msgid "Enable lighting" #~ msgstr "Activar iluminação" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Faz o cubo aparecer iluminado" #~ msgid "Start cube with new settings?" #~ msgstr "Começar cubo com as novas definições?" #~ msgid "_Play Toolbar" #~ msgstr "Barra de _Jogo" #~ msgid "_Status Bar" #~ msgstr "Barra de _Estado" #~ msgid "/_Game/sep" #~ msgstr "/_Jogo/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Jogo/_Sair" #~ msgid "/_Settings" #~ msgstr "/_Definições" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Definições/_Preferências" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Definições/_Cor" #~ msgid "/_Help/_About" #~ msgstr "/_Ajuda/_Sobre" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Definições/Mostrar\\/Esconder" gnubik-2.4.3/po/gnubik.pot0000644000175000017460000001402513070436577012364 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR John Darrington # This file is distributed under the same license as the gnubik package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "" #: src/colour-dialog.c:314 msgid "Image" msgstr "" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 msgid "New Game" msgstr "" #: src/dialogs.c:201 msgid "Dimensions" msgstr "" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "" msgstr[1] "" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 msgid "_Game" msgstr "" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 msgid "_Help" msgstr "" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 msgid "_New Game" msgstr "" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 msgid "_Colours" msgstr "" #: src/menus.c:332 msgid "_Animation" msgstr "" #: src/menus.c:336 msgid "_Faster" msgstr "" #: src/menus.c:340 msgid "_Slower" msgstr "" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" #: src/menus.c:462 msgid "Back" msgstr "" #: src/menus.c:463 msgid "Make one step backwards" msgstr "" #: src/menus.c:468 msgid "Stop" msgstr "" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "" #: src/menus.c:475 msgid "Mark" msgstr "" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" #: src/menus.c:482 msgid "Forward" msgstr "" #: src/menus.c:483 msgid "Make one step forwards" msgstr "" #: src/menus.c:488 msgid "Play" msgstr "" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" gnubik-2.4.3/po/automake.mk0000644000175000017460000000420613070435673012514 00000000000000DOMAIN=$(PACKAGE) MSGID_BUGS_ADDRESS=$(PACKAGE_BUGREPORT) XGETTEXT=xgettext MSGMERGE=msgmerge MSGFMT=msgfmt POFILES=\ po/ar.po \ po/bg.po \ po/ca.po \ po/da.po \ po/de.po \ po/el.po \ po/en_US.po \ po/eo.po \ po/es.po \ po/eu.po \ po/fi.po \ po/fr.po \ po/gl.po \ po/he.po \ po/hr.po \ po/it.po \ po/ms.po \ po/nb.po \ po/nl.po \ po/pl.po \ po/pt_BR.po \ po/pt.po \ po/tr.po \ po/uk.po \ po/ro.po \ po/ru.po \ po/sl.po \ po/sr.po \ po/sv.po \ po/vi.po \ po/zh_CN.po POTFILE=po/$(DOMAIN).pot COPYRIGHT_HOLDER=John Darrington XGETTEXT_OPTIONS = \ --copyright-holder="$(COPYRIGHT_HOLDER)" \ --package-name=$(PACKAGE) \ --package-version=$(VERSION) \ --msgid-bugs-address=$(MSGID_BUGS_ADDRESS) \ --from-code=UTF-8 \ --add-comments='TRANSLATORS:' $(POTFILE): $(DIST_SOURCES) $(dist_script_DATA) $(desktop_DATA) @$(MKDIR_P) po $(XGETTEXT) --directory=$(top_srcdir) $(XGETTEXT_OPTIONS) $(DIST_SOURCES) --language=C --keyword=_ --keyword=N_ -o $@ $(XGETTEXT) --directory=$(top_srcdir) $(XGETTEXT_OPTIONS) $(dist_script_DATA) $(desktop_DATA) --language=scheme --keyword=_ --keyword=N_ -j -o $@ $(SED) -e '/POT-Creation-Date: /d' $@ > $@,tmp mv $@,tmp $@ $(POFILES): $(POTFILE) $(MSGMERGE) $(top_srcdir)/$@ $? -o $@ SUFFIXES += .po .gmo .po.gmo: @$(MKDIR_P) `dirname $@` $(MSGFMT) $< -o $@ GMOFILES = $(POFILES:.po=.gmo) ALL_LOCAL += $(GMOFILES) install-data-hook: $(GMOFILES) for f in $(GMOFILES); do \ lang=`echo $$f | $(SED) -e 's%po/\(.*\)\.gmo%\1%' ` ; \ $(MKDIR_P) $(DESTDIR)$(prefix)/share/locale/$$lang/LC_MESSAGES; \ $(INSTALL_DATA) $$f $(DESTDIR)$(prefix)/share/locale/$$lang/LC_MESSAGES/$(DOMAIN).mo ; \ done uninstall-hook: for f in $(GMOFILES); do \ lang=`echo $$f | $(SED) -e 's%po/\(.*\)\.gmo%\1%' ` ; \ rm -f $(DESTDIR)$(prefix)/share/locale/$$lang/LC_MESSAGES/$(DOMAIN).mo ; \ done EXTRA_DIST += $(POFILES) $(POTFILE) CLEANFILES += $(GMOFILES) $(POTFILE) # Clean $(POFILES) from build directory but not if that's the same as # the source directory. .PHONY: po_CLEAN po_CLEAN: @if test "$(srcdir)" != .; then \ echo rm -f $(POFILES); \ rm -f $(POFILES); \ fi CLEAN_LOCAL += po_CLEAN gnubik-2.4.3/po/es.po0000644000175000017460000002034413070436577011331 00000000000000# Translation of Gnubik to Castilian aka Spanish # This file is distributed under the same license as the Gnubik package. # Copyright (C) 2003 John Darrington # Quique , 2003. # msgid "" msgstr "" "Project-Id-Version: Gnubik\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2003-12-23 08:31+0100\n" "Last-Translator: Quique \n" "Language-Team: Castilian aka Spanish \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.0.2\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Selector de la imagen" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Imagen" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Selector del color" #: src/colour-dialog.c:314 msgid "Image" msgstr "Imagen" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Se_leccionar" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Seleccionar un fichero imagen" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "En _mosaico" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Colocar una copia de la imagen\n" "en cada bloque" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Ajustado" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Colocar una copia de la imagen sobre\n" "toda la cara del cubo" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Utilizar una imagen sobre la cara del cubo" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Tamaño del cubo:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Establece el número de bloques en cada lado" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Juego/_Nuevo juego" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensiones" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, fuzzy, c-format msgid "Moves: %d / %d" msgstr "Movimientos: %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cubo resuelto en %d movimientos" msgstr[1] "Cubo resuelto en %d movimientos" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "¡El cubo NO está resuelto! Los colores son correctos, pero la orientación no." #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Juego" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_Ayuda" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Opciones" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Juego/_Nuevo juego" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Color" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Animación" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Más rápido" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Más lento" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" #: src/menus.c:462 msgid "Back" msgstr "" #: src/menus.c:463 msgid "Make one step backwards" msgstr "" #: src/menus.c:468 msgid "Stop" msgstr "" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "" #: src/menus.c:475 msgid "Mark" msgstr "" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" #: src/menus.c:482 msgid "Forward" msgstr "" #: src/menus.c:483 msgid "Make one step forwards" msgstr "" #: src/menus.c:488 msgid "Play" msgstr "" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Una muestra del color o patrón. Puede pulsar y seleccionar un nuevo color o " "patrón, o arrastrar uno a este espacio." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf tiene un número incorrecto de canales" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf tiene un espacio de color desconocido: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Imposible crear la imagen a partir del fichero%s:%s" #~ msgid "Pattern" #~ msgstr "Patrón" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Pulse aquí para aplicar un patrón sobre una superficie del cubo" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Controla la velocidad con la que giran las rodajas" #~ msgid "Preferences" #~ msgstr "Preferencias" #~ msgid "Lighting" #~ msgstr "Iluminación" #~ msgid "Enable lighting" #~ msgstr "Habilitar la iluminación" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Hace que el cubo aparezca iluminado" #~ msgid "Start cube with new settings?" #~ msgstr "¿Iniciar el cubo con las nuevas opciones?" #~ msgid "/_Game/sep" #~ msgstr "/_Juego/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Juego/_Salir" #~ msgid "/_Settings" #~ msgstr "/_Opciones" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Opciones/_Preferencias" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Opciones/_Colores" #~ msgid "/_Help/_About" #~ msgstr "/_Ayuda/_Acerca de" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Opciones" gnubik-2.4.3/po/fr.po0000644000175000017460000002023013070436577011323 00000000000000# Traduction française de GNUbik # Copyright (C) 2003 John Darrington # This file is distributed under the same license as the gnubik package. # John Darrington , 2003. # Guy Decarpentrie , 2003. # Stéphane Aulery , 2015. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-04-11 11:03+0200\n" "Last-Translator: Stéphane Aulery \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Sélecteur d’image" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Toutes les images" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Tous les fichiers" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Sélecteur de couleur" #: src/colour-dialog.c:314 msgid "Image" msgstr "Image" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Selection" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Choisir une image" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Carrelé" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Habiller chaque bloc avec l’mage" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaïque" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Habiller toutes faces du cube avec l’image" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Texte" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Supprimer l’image de la face du cube" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Taille du cube :" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Cube ré_gulier" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Préciser le nombre de blocs de chaque face" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Autoriser seulement les cubes réguliers" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Cube magique à 3 dimensions" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Guy Decarpentrie (2003), Stéphane Aulery (2015)" #: src/dialogs.c:189 msgid "New Game" msgstr "Nouvelle partie" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensions" #: src/dialogs.c:212 msgid "Initial position" msgstr "Position initiale" #: src/dialogs.c:216 msgid "_Random" msgstr "_Aléatoire" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Résoudre" #: src/menus.c:94 msgid "Rear View" msgstr "Vue arrière" #: src/menus.c:102 msgid "Bottom View" msgstr "Vue de dessous" #: src/menus.c:109 msgid "Top View" msgstr "Vue du dessus" #: src/menus.c:117 msgid "Left View" msgstr "Vue de gauche" #: src/menus.c:124 msgid "Right View" msgstr "Vue de droite" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "L’emplacement %d est marqué." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Mouvements : %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cube résolu en %d mouvement" msgstr[1] "Cube résolu en %d mouvements" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Le cube n'est PAS terminé ! Les couleurs sont correctes, mais pas " "l'orientation" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Animation d'une image par tour." msgstr[1] "Animation de %d images par tour." #: src/menus.c:228 msgid "_Game" msgstr "_Jeux" #: src/menus.c:229 msgid "_View" msgstr "_Vue" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Ajouter une vu_e" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Ajouter une vue auxiliaire au cube" #: src/menus.c:235 msgid "_Help" msgstr "A_ide" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "A_fficher / Masquer" #: src/menus.c:237 msgid "_Scripts" msgstr "_Scripts" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Recommencer la partie" #: src/menus.c:311 msgid "_New Game" msgstr "_Nouvelle partie" #: src/menus.c:315 msgid "_Rear" msgstr "A_rrière" #: src/menus.c:317 msgid "_Left" msgstr "_Gauche" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Droite" #: src/menus.c:321 msgid "_Top" msgstr "Dess_us" #: src/menus.c:323 msgid "_Bottom" msgstr "Dess_ous" #: src/menus.c:328 msgid "_Colours" msgstr "_Couleurs" #: src/menus.c:332 msgid "_Animation" msgstr "_Animation" #: src/menus.c:336 msgid "_Faster" msgstr "_Plus vite" #: src/menus.c:340 msgid "_Slower" msgstr "_Moins vite" #: src/menus.c:455 msgid "Rewind" msgstr "Rembobiner" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" "Aller à la marque précédente (ou au début) de la séquence des mouvements" #: src/menus.c:462 msgid "Back" msgstr "En arrière" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Un coup en arrière" #: src/menus.c:468 msgid "Stop" msgstr "Arrêt" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Arrêter le déroulement de la séquence" #: src/menus.c:475 msgid "Mark" msgstr "Marque" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Marquer la position actuelle de la séquence" #: src/menus.c:482 msgid "Forward" msgstr "En avant" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Un coup en avant" #: src/menus.c:488 msgid "Play" msgstr "Jouer" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Dérouler les séquences en marche avant" #: src/menus.c:555 msgid "Gnubik error" msgstr "Erreur de Gnubik" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Un exemple de couleur. Vous pouvez cliquer et choisir une nouvelle couleur, " "ou en glisser une à cet endroit." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf n’a pas les bons numéros de canaux" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf ne reconnait la palette : %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Débogage" #: scripts/debug.scm:52 msgid "_Move" msgstr "Dépla_cer" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "_Vidage de la pile" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "Tirage _aléatoire" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Ce script marche seulement avec des cubes réguliers de dimension 3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Solveurs" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3x3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "Cube _entier" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Bords _inférieur" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "_Coin inférieur orienté" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "Coin in_férieur" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "Tranche du _milieu" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "Tranche du _haut" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "Bords _supérieurs" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Un cube magique à 3 dimensions qui fait chauffer les méninges" gnubik-2.4.3/po/eu.po0000644000175000017460000002064513070436577011337 00000000000000# Translation of Gnubik to Euskara (Basque) # This file is distributed under the same license as the Gnubik package. # Copyright (C) 2003 John Darrington # msgid "" msgstr "" "Project-Id-Version: Gnubik\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2007-02-02 20:35+0100\n" "Last-Translator: 3ARRANO <3arrano@3arrano.com>\n" "Language-Team: Euskara <3arrano@3arrano.com>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Irudi Hautatzailea" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Irudia" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Kolore hautatzailea" #: src/colour-dialog.c:314 msgid "Image" msgstr "Irudia" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Hautatu" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Hautatu irudi fitxategi bat" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Errepikatuta" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Bloke bakoitzean irudiaren kopia\n" "bat jarri " #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaikoa" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Kuboaren aurpegi osoan zehar\n" "irudi bat jarri" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Erabili irudi bat kuboaren aurpegian" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Kuboaren neurria:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Alde bakoitzeko bloke kopurua zehaztu" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Jokoa/_Joko berria" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimentsioak" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Mugimenduak: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kuboa ebatzita mugimendu %dean" msgstr[1] "Kuboa ebatzita %d mugimendutan" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Kuboa EZ dago ebatzita! Koloreak zuzenak dira, baina hauen norantza ez." #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Jokoa" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_Laguntza" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Ezarpenak/E_rakutsi\\/Ezkutatu" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Jokoa/_Joko berria" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Kolorea" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Animazioa" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Bizkorrago" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Motelago" #: src/menus.c:455 msgid "Rewind" msgstr "Atzeratu" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Mugimendu sekuentziaren aurreko markara (edo hasierara) joan" #: src/menus.c:462 msgid "Back" msgstr "Atzera" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Urrats bat atzeratu" #: src/menus.c:468 msgid "Stop" msgstr "Gelditu" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Gelditu mugimendu sekuentzia" #: src/menus.c:475 msgid "Mark" msgstr "Markatu" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Markatu mugimendu sekuentziaren une hau" #: src/menus.c:482 msgid "Forward" msgstr "Aurrera" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Urrats bat aurreratu" #: src/menus.c:488 msgid "Play" msgstr "Ekin" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Mugimendu sekuentzian zehar aurrera egin" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Kolore edo ereduaren aurrebista. Bertan klikatu eta kolore edo eredu berri " "bat hauta dezakezu edo bertara bat garraiatu." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbufek kanal kopuru okerra du" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbufek koloregune ezezaguna du: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Ezin izan da %s fitxategitik irudia sortu: %s" #~ msgid "Pattern" #~ msgstr "Eredua" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Klikatu hemen eredua kuboaren gainazalean jartzeko" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Kuboaren biraketa abiadura egokitzen du" #~ msgid "Preferences" #~ msgstr "Hobespenak" #~ msgid "Lighting" #~ msgstr "Argiztaketa" #~ msgid "Enable lighting" #~ msgstr "Argiztaketa gaitu" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Kuboa argiztatuta ikusarazten du" #~ msgid "Start cube with new settings?" #~ msgstr "Kuboa ezarpen berrietara egokitu?" #~ msgid "_Play Toolbar" #~ msgstr "_Kontrol Tresnabarra" #~ msgid "_Status Bar" #~ msgstr "_Egoera Barra" #~ msgid "/_Game/sep" #~ msgstr "/_Jokoa/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Jokoa/_Kendu" #~ msgid "/_Settings" #~ msgstr "/_Ezarpenak" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Ezarpenak/_Hobespenak" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Ezarpenak/_Koloreak" #~ msgid "/_Help/_About" #~ msgstr "/_Laguntza/_Honi buruz" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Ezarpenak/Erakutsi\\/Ezkutatu" gnubik-2.4.3/po/ru.po0000644000175000017460000002332213070436577011347 00000000000000# Russian messages for GNUbik -*- mode: po; buffer-file-coding-system: utf-8; default-input-method: cyrillic-yawerty -*- # Copyright (C) 2004 John Darrington # This file is distributed under the same license as the GNUbik package. # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.2\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2004-11-26 16:06+0200\n" "Last-Translator: Sergey Poznyakoff \n" "Language-Team: Russian \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Выбор изображения" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Изображение" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Выбор цвета" #: src/colour-dialog.c:314 msgid "Image" msgstr "Изображение" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Выбор" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Выбор файла изображения" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Встык" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Разместить копию изображения\n" "на каждом блоке" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Мозаика" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Разместить копию изображения\n" "на всей поверхности куба" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Использовать файл изображения для поверхности куба" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Сторона куба:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Установка количества блоков на каждой стороне" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Игра/_Новая игра" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Размерность" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Шаги: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Куб решен за %d шаг" msgstr[1] "Куб решен за %d шага" msgstr[2] "Куб решен за %d шагов" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Куб НЕ решен! Цвета верны, но расположены неверно." #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" msgstr[2] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Игра" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_Подсказка" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Настройки/Показать\\/Скрыть" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Игра/_Новая игра" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Цвет" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Анимация" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Быстрее" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Медленнее" #: src/menus.c:455 msgid "Rewind" msgstr "Перемотка" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Переход к предыдущей метке или к началу последовательности шагов" #: src/menus.c:462 msgid "Back" msgstr "Назад" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Один шаг назад" #: src/menus.c:468 msgid "Stop" msgstr "Остановка" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Остановить выполняемую последовательность шагов" #: src/menus.c:475 msgid "Mark" msgstr "Метка" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Отметить текущее положение в последовательности шагов" #: src/menus.c:482 msgid "Forward" msgstr "Вперёд" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Один шаг вперёд" #: src/menus.c:488 msgid "Play" msgstr "Выполнить" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Выполнить последовательность шагов" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Пример цвета или шаблона. Вы можете выбрать новый цвет или шаблон щелчком " "или перенести его сюда." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Неверное количество каналов для pixbuf" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Неизвестное пространство цветов для pixbuf: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Невозможно создать изображение из файла %s: %s" #~ msgid "Pattern" #~ msgstr "Шаблон" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Щелкните здесь чтобы использовать шаблон для поверхности куба" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Управление скоростью вращения срезов" #~ msgid "Preferences" #~ msgstr "Предпочтения" #~ msgid "Lighting" #~ msgstr "Подсветка" #~ msgid "Enable lighting" #~ msgstr "Включение подсветки" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Включение подсветки куба" #~ msgid "Start cube with new settings?" #~ msgstr "Начать с новыми настройками?" #~ msgid "_Play Toolbar" #~ msgstr " Команды управления" #~ msgid "_Status Bar" #~ msgstr " Строка состояния" #~ msgid "/_Game/sep" #~ msgstr "/_Игра/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Игра/_Выход" #~ msgid "/_Settings" #~ msgstr "/_Настройки" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Настройки/_Предпочтения" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Настройки/_Цвета" #~ msgid "/_Help/_About" #~ msgstr "/_Подсказка/_О программе" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Настройки/Показать\\/Скрыть" gnubik-2.4.3/po/fi.po0000644000175000017460000002316013070436577011317 00000000000000# Message file for Finnish version of GNUbik # Copyright © 2004, 2007, 2007, 2010, 2011, 2015 John Darrington # This file is distributed under the same license as the gnubik package. # John Darrington , 2004. # Niko Itäjärvi , 2004. # Jorma Karvonen , 2007. # Jorma Karvonen , 2010-2011, 2015. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-04-16 21:46+0300\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: Finnish\n" "X-Poedit-Country: FINLAND\n" "X-Generator: KBabel 1.11.2\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Kuvavalitsija" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Kaikki kuvat" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Kaikki tiedostot" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Värivalitsija" #: src/colour-dialog.c:314 msgid "Image" msgstr "Kuva" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Valitse" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Valitse kuvatiedosto" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Laatoitettu" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Aseta kuvan kopio jokaiselle sivulle" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaiikki" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Aseta kuvan kopio kautta koko kuution" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Pelkkä" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Poista kuva kuution sivusta" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Kuution koko:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Sää_nnöllinen kuutio" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Asettaa reunojen määrä joka puolelle" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Salli vain kuutiot, joiden kaikki sivut ovat samankokoiset" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Kolmiulotteinen maaginen kuutiopulma" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Niko Itäjärvi , Jorma Karvonen " #: src/dialogs.c:189 msgid "New Game" msgstr "Uusi Peli" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Ulottuvuus" #: src/dialogs.c:212 msgid "Initial position" msgstr "Alkusijainti" #: src/dialogs.c:216 msgid "_Random" msgstr "_Satunnainen" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Ratkaistu" #: src/menus.c:94 msgid "Rear View" msgstr "Näkymä takaa" #: src/menus.c:102 msgid "Bottom View" msgstr "Näkymä pohjalta" #: src/menus.c:109 msgid "Top View" msgstr "Näkymä päältä" #: src/menus.c:117 msgid "Left View" msgstr "Näkymä vasemmalta" #: src/menus.c:124 msgid "Right View" msgstr "Näkymä oikealta" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Merkki on nyt asetettu sijaintiin %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Siirrot: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kuutio ratkaistu %d siirrolla" msgstr[1] "Kuutio ratkaistu %d siirrolla" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Kuutiota EI ole ratkaistu! Värit ovat oikein, mutta sinulla on väärä suuntaus" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Animaationopeudeksi on asetettu %d kehys per käännös." msgstr[1] "Animaationopeudeksi on asetettu %d kehystä per käännös." #: src/menus.c:228 msgid "_Game" msgstr "_Peli" #: src/menus.c:229 msgid "_View" msgstr "Nä_kymä" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Lisää _näkymä" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Lisää kuution apunäkymä" #: src/menus.c:235 msgid "_Help" msgstr "_Opaste" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "Nä_ytä/Piilota" #: src/menus.c:237 msgid "_Scripts" msgstr "Skrip_tit" #: src/menus.c:307 msgid "_Restart Game" msgstr "Käynnistä peli uu_delleen" #: src/menus.c:311 msgid "_New Game" msgstr "_Uusi Peli" #: src/menus.c:315 msgid "_Rear" msgstr "Ta_usta" #: src/menus.c:317 msgid "_Left" msgstr "_Vasen" #: src/menus.c:319 msgid "Ri_ght" msgstr "O_ikea" #: src/menus.c:321 msgid "_Top" msgstr "Pääl_tä" #: src/menus.c:323 msgid "_Bottom" msgstr "Po_hjalta" #: src/menus.c:328 msgid "_Colours" msgstr "Vä_ri" #: src/menus.c:332 msgid "_Animation" msgstr "Ani_maatio" #: src/menus.c:336 msgid "_Faster" msgstr "N_opeampaa" #: src/menus.c:340 msgid "_Slower" msgstr "_Hitaampaa" #: src/menus.c:455 msgid "Rewind" msgstr "Palaa takaisin" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Siirry edelliseen siirtosarjan merkkiin (tai alkuun)" #: src/menus.c:462 msgid "Back" msgstr "Paluu" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Siirry askel taaksepäin" #: src/menus.c:468 msgid "Stop" msgstr "Pysähdy" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Pysäytä siirtojen sarja" #: src/menus.c:475 msgid "Mark" msgstr "Merkitse" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Merkitse nykyinen paikka siirtosarjassa" #: src/menus.c:482 msgid "Forward" msgstr "Eteenpäin" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Askella yksi askel eteenpäin" #: src/menus.c:488 msgid "Play" msgstr "Pelaa" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Suorita eteenpäin siirtosarjan kautta" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik-virhe" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Värinäyte. Voit napsauttaa ja valita uuden värin, tai siirtää valitun tähän " "kohtaan." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbufilla on väärä kanavamäärä" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbufilla on tuntematon väriarvo: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "Vika_jäljitä" #: scripts/debug.scm:52 msgid "_Move" msgstr "Sii_rrä" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "Tu_losta tila" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "Satunna_ista" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Tämä skripti toimii ainoastaan 3x3x3 -kuutioilla." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "Rat_kaisija" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "K_oko kuutio" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Po_hjimmaisen reunan paikka" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "P_ohjimmaisen kulman suunta" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "A_limmainen kulmapaikka" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "Kesk_immäinen siivu" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "Päällimmäinen sii_vu" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "Päällimmäiset _reunat" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Kolmiulotteinen maaginen kuutiopulma" #~ msgid "_Animated" #~ msgstr "A_nimoitu" #~ msgid "_Fast" #~ msgstr "Nop_eampaa" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Kuvan luonti epäonnistui tiedostosta %s: %s" #~ msgid "Pattern" #~ msgstr "Kuvio" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Napsauta tästä käyttääksesi kuviota kuutiossa" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Ohjaa siivujen pyörimisnopeutta" #~ msgid "Preferences" #~ msgstr "Asetukset" #~ msgid "Lighting" #~ msgstr "Valaistus" #~ msgid "Enable lighting" #~ msgstr "Ota valaistus käyttöön" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Tekee kuutiosta valaistun" #~ msgid "Start cube with new settings?" #~ msgstr "Aloita kuutio uusin asetuksin?" #~ msgid "_Play Toolbar" #~ msgstr "_Pelaa-työkalupalkki" #~ msgid "_Status Bar" #~ msgstr "_Tilapalkki" #~ msgid "/_Game/sep" #~ msgstr "/_Peli/erotin" #~ msgid "/_Game/_Quit" #~ msgstr "/_Peli/_Lopeta" #~ msgid "/_Settings" #~ msgstr "/_Asetukset" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Asetukset/_Lisäasetukset" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Asetukset/_Värit" #~ msgid "/_Help/_About" #~ msgstr "/_Opaste/O_hjelmasta" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Asetukset/Näytä\\/Piilota" gnubik-2.4.3/po/sr.po0000644000175000017460000002572113070436577011352 00000000000000# Serbian translation of gnubik. # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # Jay A. Fleming , 2010. # Мирослав Николић , 2012—2015. msgid "" msgstr "" "Project-Id-Version: gnubik-2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-04-12 11:14+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Избор слике" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Све слике" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Све датотеке" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Избор боје" #: src/colour-dialog.c:314 msgid "Image" msgstr "Слика" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Иза_бери" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Изаберите слику" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "Попло_чано" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Поставите слику на сваки блок једне стране" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Мозаик" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Поставите слику преко целе стране коцке" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Обично" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Уклоните слику са стране коцке" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Величина коцке:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "_Уобичајена коцка" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Поставља број блокова на једној страни" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Допушта само коцке са свим странама исте величине" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Слагалица магичне коцке у три димензије" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" " Jay A. Fleming , 2010\n" " Мирослав Николић , 2012" #: src/dialogs.c:189 msgid "New Game" msgstr "Нова игра" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Димензије" #: src/dialogs.c:212 msgid "Initial position" msgstr "Почетни положај" #: src/dialogs.c:216 msgid "_Random" msgstr "_Случајан" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Решен" #: src/menus.c:94 msgid "Rear View" msgstr "Поглед спреда" #: src/menus.c:102 msgid "Bottom View" msgstr "Поглед одоздо" #: src/menus.c:109 msgid "Top View" msgstr "Поглед одозго" #: src/menus.c:117 msgid "Left View" msgstr "Поглед слева" #: src/menus.c:124 msgid "Right View" msgstr "Поглед сдесна" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Знак је сада постављен на положај %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Потези: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Коцка је решена у %d потезу " msgstr[1] "Коцка је решена у %d потеза " msgstr[2] "Коцка је решена у %d потеза " #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Коцка НИЈЕ решена! Боје су исправне али нису исправно усмерене" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Проток анимације је подешен на %d кадар по обрту." msgstr[1] "Проток анимације је подешен на %d кадра по обрту." msgstr[2] "Проток анимације је подешен на %d кадрова по обрту." #: src/menus.c:228 msgid "_Game" msgstr "_Игра" #: src/menus.c:229 msgid "_View" msgstr "_Поглед" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Додај _поглед" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Додајте помоћни поглед коцке" #: src/menus.c:235 msgid "_Help" msgstr "_Помоћ" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "При_кажи/Сакриј" #: src/menus.c:237 msgid "_Scripts" msgstr "_Скрипте" #: src/menus.c:307 msgid "_Restart Game" msgstr "Поново пок_рени игру" #: src/menus.c:311 msgid "_New Game" msgstr "_Нова игра" #: src/menus.c:315 msgid "_Rear" msgstr "_Залеђе" #: src/menus.c:317 msgid "_Left" msgstr "_Лево" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Десно" #: src/menus.c:321 msgid "_Top" msgstr "_Горе" #: src/menus.c:323 msgid "_Bottom" msgstr "Д_оле" #: src/menus.c:328 msgid "_Colours" msgstr "_Боје" #: src/menus.c:332 msgid "_Animation" msgstr "_Анимација" #: src/menus.c:336 msgid "_Faster" msgstr "_Брже" #: src/menus.c:340 msgid "_Slower" msgstr "_Спорије" #: src/menus.c:455 msgid "Rewind" msgstr "Уназад" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Идите на претходно означени или почетни потез у низу потеза" #: src/menus.c:462 msgid "Back" msgstr "Назад" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Вратите се један потез уназад" #: src/menus.c:468 msgid "Stop" msgstr "Заустави" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Зауставите извршавање низа потеза" #: src/menus.c:475 msgid "Mark" msgstr "Означи" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Забележите овај потез у низ потеза" #: src/menus.c:482 msgid "Forward" msgstr "Напред" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Начините један потез унапред" #: src/menus.c:488 msgid "Play" msgstr "Покрени" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Покрените игру кроз низ потеза" #: src/menus.c:555 msgid "Gnubik error" msgstr "Грешка Гнубика" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Узорак боје. Можете да кликнете и да изаберете нову боју, или да превучете " "неку у овај простор." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Сличица има погрешан број канала" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Сличица има непознат простор боја: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Уклањање грешака" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Помери" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "_Одбаци стање" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Случајно" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Ова скрипта ради само на 3×3×3 коцкама." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Решавачи" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "Пуна _коцка" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Место доње _ивице" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "_Оријентир доњег угла" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "Место доњег _угла" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "_Средњи прстен" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "Горњи _прстен" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "_Горње ивице" #~ msgid "GNUbik" #~ msgstr "Гнубик" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Слагалица магичне 3Д коцке" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Не могу да направим слику од датотеке %s: %s" #~ msgid "Pattern" #~ msgstr "Мустра" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Налепи ову мустру на одабрани блок коцке" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Контола брзине окретања" #~ msgid "Preferences" #~ msgstr "Подешавања" #~ msgid "Lighting" #~ msgstr "Осветљење" #~ msgid "Enable lighting" #~ msgstr "Осветли" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Додатно светло на коцки" #~ msgid "Start cube with new settings?" #~ msgstr "Да покренем игру са новим подешавањима?" #~ msgid "_Play Toolbar" #~ msgstr "Тр_ака са алатима за игру" #~ msgid "_Status Bar" #~ msgstr "С_татусна трака " #~ msgid "/_Game/sep" #~ msgstr "/_Игра/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Игра/_Заврши игру" #~ msgid "/_Settings" #~ msgstr "/По_ставке" #~ msgid "/_Settings/_Preferences" #~ msgstr "/По_ставке/По_дешавања" #~ msgid "/_Settings/_Colours" #~ msgstr "/По_ставке/_Боје" #~ msgid "/_Help/_About" #~ msgstr "/_Помоћ/О про_граму" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Поставке/Прикажи\\/Сакриј" gnubik-2.4.3/po/pt_BR.po0000644000175000017460000002225213070436577011730 00000000000000# Portuguese (pt_PT) translations for GNUbik # Copyright (C) 2003, 2007, 2013, 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # John Darrington , 2003. # Translators: # Daniel Marujo , 2007. # João Fernando Ferreira , 2007. # Felipe Castro , 2013, 2015. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-05-31 10:01-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 1.6.10\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Seletor de Imagem" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Todas Imagens" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Todos Arquivos" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Seletor de Cor" #: src/colour-dialog.c:314 msgid "Image" msgstr "Imagem" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Se_lecionar" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Selecione uma imagem" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Azulejo" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Colocar uma cópia da imagem em cada bloco" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaico" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Colocar uma cópia da imagem em toda a face do cubo" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Plano" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Remover imagem da face do cubo" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Tamanho do cubo:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Cubo re_gular" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Define o número de blocos em cada lado" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Permite somente cubos com todos lados iguais" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Um quebra-cabeça de cubo mágico em 3D" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Daniel Marujo\n" "João Fernando Ferreira\n" "Felipe Castro" #: src/dialogs.c:189 msgid "New Game" msgstr "Jogo _Novo" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensões" #: src/dialogs.c:212 msgid "Initial position" msgstr "Posição inicial" #: src/dialogs.c:216 msgid "_Random" msgstr "Aleató_rio" #: src/dialogs.c:220 msgid "_Solved" msgstr "Re_solvido" #: src/menus.c:94 msgid "Rear View" msgstr "Vista Traseira" #: src/menus.c:102 msgid "Bottom View" msgstr "Vista de Baixo" #: src/menus.c:109 msgid "Top View" msgstr "Vista de Cima" #: src/menus.c:117 msgid "Left View" msgstr "Vista Esquerda" #: src/menus.c:124 msgid "Right View" msgstr "Vista Direita" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Uma marka está colocada agora na posição %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Movimentos: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cubo resolvido em %d movimento" msgstr[1] "Cubo resolvido em %d movimentos" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "O cubo NÃO está resolvido! As cores estão corretas, mas com orientação " "incorreta" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Taxa de animação ajustada en %d quadro por volta." msgstr[1] "Taxa de animação ajustada en %d quadros por volta." #: src/menus.c:228 msgid "_Game" msgstr "_Jogo" #: src/menus.c:229 msgid "_View" msgstr "_Vista" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Adicionar _Vista" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Adicinar uma vista auxiliar do cubo" #: src/menus.c:235 msgid "_Help" msgstr "_Ajuda" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "_Mostrar/Esconder" #: src/menus.c:237 msgid "_Scripts" msgstr "_Scripts" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Reiniciar Jogo" #: src/menus.c:311 msgid "_New Game" msgstr "_Novo Jogo" #: src/menus.c:315 msgid "_Rear" msgstr "T_raseira" #: src/menus.c:317 msgid "_Left" msgstr "_Esquerda" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Direita" #: src/menus.c:321 msgid "_Top" msgstr "_Topo" #: src/menus.c:323 msgid "_Bottom" msgstr "Em_baixo" #: src/menus.c:328 msgid "_Colours" msgstr "_Cores" #: src/menus.c:332 msgid "_Animation" msgstr "_Animação" #: src/menus.c:336 msgid "_Faster" msgstr "Mais _rápido" #: src/menus.c:340 msgid "_Slower" msgstr "Mais _devagar" #: src/menus.c:455 msgid "Rewind" msgstr "Rebobinar" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" "Ir para a última posição marcada (ou para o início) da sequência de " "movimentos" #: src/menus.c:462 msgid "Back" msgstr "Voltar" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Retroceder um passo" #: src/menus.c:468 msgid "Stop" msgstr "Parar" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Parar a sequência de movimentos" #: src/menus.c:475 msgid "Mark" msgstr "Marcar" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Marcar a posição actual na sequência de movimentos" #: src/menus.c:482 msgid "Forward" msgstr "Avançar" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Avançar um passo" #: src/menus.c:488 msgid "Play" msgstr "Jogar" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Avançar através da sequência de movimentos" #: src/menus.c:555 msgid "Gnubik error" msgstr "Erro do Gnubik" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Uma amostra da cor. Você pode clicar e selecionar uma nova cor, ou arrastar " "uma para este espaço." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf tem um número de canais incorreto" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf tem uma paleta de cores desconhecida: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Depurar" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Mover" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "Mostrar _estado" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "Emba_ralhar" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Este script só trabalha em cubos 3×3×3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Solucionadores" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "Cubo _pleno" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Lugar da marg_em de baixo" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Orientação da _quina de baixo" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "Lugar da quina de _baixo" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "Fatia do _meio" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "Fatia do _topo" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "Margens do _topo" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Um quebra-cabeça de cubo mágico 3D" #~ msgid "R_eset" #~ msgstr "_Reiniciar" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Impossível criar imagem a partir do arquivo %s: %s" #~ msgid "Pattern" #~ msgstr "Padrão" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Clique aqui para usar um padrão na superfície do cubo" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Controlar a velocidade de rotação de cada secção" #~ msgid "Preferences" #~ msgstr "Preferências" #~ msgid "Lighting" #~ msgstr "Iluminação" #~ msgid "Enable lighting" #~ msgstr "Ativar iluminação" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Faz o cubo aparecer iluminado" #~ msgid "Start cube with new settings?" #~ msgstr "Começar cubo com as novas definições?" #~ msgid "_Play Toolbar" #~ msgstr "Barra de _Jogo" #~ msgid "_Status Bar" #~ msgstr "Barra de _Estado" gnubik-2.4.3/po/vi.po0000644000175000017460000002125413070436577011341 00000000000000# Vietnamese translation for gnubik. # Bản dịch tiếng Việt dành cho gnubik. # Copyright © 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # Trần Ngọc Quân , 2013, 2015. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-04-12 14:19+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language-Team-Website: \n" "X-Poedit-SourceCharset: UTF-8\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.5.5\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Hộp thoại chọn ảnh" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Tất cả các loại ảnh" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Mọi kiểu tập tin" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Hộp thoại chọn màu" #: src/colour-dialog.c:314 msgid "Image" msgstr "Ảnh" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Chọn" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Chọn một ảnh" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Lát gạch" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Đặt bản sao ảnh trên từng khối" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaic" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Đặt ảnh tại từng mặt của khối lập phương" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Thường" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Bỏ ảnh ra khỏi mặt của khối lập phương" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Kích thước khối lập phương:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Khối lập phương _thông thường" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Đặt số lượng khối mỗi mặt" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Chỉ cho phép khối lập phương mà có các mặt cùng kích thước" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Trò chơi trí tuệ về khối lập phương ba chiều" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Nhóm Việt hóa tại TranslationProject.org " #: src/dialogs.c:189 msgid "New Game" msgstr "Ván Mới" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Các chiều" #: src/dialogs.c:212 msgid "Initial position" msgstr "Vị trí khởi tạo" #: src/dialogs.c:216 msgid "_Random" msgstr "_Ngẫu nhiên" #: src/dialogs.c:220 msgid "_Solved" msgstr "Đã _giải" #: src/menus.c:94 msgid "Rear View" msgstr "Hiển thị mặt sau" #: src/menus.c:102 msgid "Bottom View" msgstr "Hiển thị mặt đáy" #: src/menus.c:109 msgid "Top View" msgstr "Hiển thị mặt trên" #: src/menus.c:117 msgid "Left View" msgstr "Hiển thị mặt trái" #: src/menus.c:124 msgid "Right View" msgstr "Hiển thị mặt phải" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Dấu hiện tại được đặt tại vị trí %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Nước đi: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Khối lập phương được giải quyết sau %d nước đi" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Khối lập phương CHƯA được giải! Màu thì đúng, nhưng hướng lại chưa" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Tốc độ hoạt hình được đặt thành %d khung hình cho mỗi nước đi." #: src/menus.c:228 msgid "_Game" msgstr "_Ván chơi" #: src/menus.c:229 msgid "_View" msgstr "_Trình bày" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Thêm _Hướng xem" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Thêm một hướng xem khối lập phương bổ trợ" #: src/menus.c:235 msgid "_Help" msgstr "Trợ g_iúp" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "Ẩn/_Hiện" #: src/menus.c:237 msgid "_Scripts" msgstr "_Văn lệnh" #: src/menus.c:307 msgid "_Restart Game" msgstr "Đặt _Lại ván chơi" #: src/menus.c:311 msgid "_New Game" msgstr "_Ván Mới" #: src/menus.c:315 msgid "_Rear" msgstr "_Sau" #: src/menus.c:317 msgid "_Left" msgstr "Bên t_rái" #: src/menus.c:319 msgid "Ri_ght" msgstr "Bên _phải" #: src/menus.c:321 msgid "_Top" msgstr "_Trên" #: src/menus.c:323 msgid "_Bottom" msgstr "_Dưới" #: src/menus.c:328 msgid "_Colours" msgstr "Màu _sắc" #: src/menus.c:332 msgid "_Animation" msgstr "_Hoạt hình" #: src/menus.c:336 msgid "_Faster" msgstr "_Nhanh lên" #: src/menus.c:340 msgid "_Slower" msgstr "_Chậm đi" #: src/menus.c:455 msgid "Rewind" msgstr "Tua" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Đi đến điểm dấu kế trước (hay bắt đầu) của danh sách nước đi" #: src/menus.c:462 msgid "Back" msgstr "Trước" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Di chuyển một bước về phía sau" #: src/menus.c:468 msgid "Stop" msgstr "Dừng" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Dừng chạy các nước đi nối tiếp nhau" #: src/menus.c:475 msgid "Mark" msgstr "Đánh dấu" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Đánh dấu mặt hiện tại trong chuỗi nước đi" #: src/menus.c:482 msgid "Forward" msgstr "Tiếp" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Di chuyển một bước về phía trước" #: src/menus.c:488 msgid "Play" msgstr "Chạy" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Chạy về phía kế sau một nước đi trong ván chơi" #: src/menus.c:555 msgid "Gnubik error" msgstr "Lỗi Gnubik" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "Mẫu màu. Bạn bấm và chọn một màu mới, hay kéo thả một mày vào mặt này." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf có số lượng kênh sai" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf có không gian màu không rõ: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Gỡ lỗi" #: scripts/debug.scm:52 msgid "_Move" msgstr "Di chuyể_n" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "Đổ _trạng thái" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Ngẫu nhiên" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Kịch bản này chỉ hoạt động với các khối lập phương 3×3×3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Cách giải" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "Khối lập phương đầ_y đủ" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Vị trí _cạnh đáy" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Hướng _góc đáy" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "Vị trí góc đá_y" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "Lát _giữa" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "Lát _Trên" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "_Cạnh trên" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Trò chơi trí tuệ về khối lập phương ba chiều" gnubik-2.4.3/po/ca.po0000644000175000017460000002016713070436577011310 00000000000000# Translation of Gnubik to Catalan # This file is distributed under the same license as the Gnubik package. # Copyright (C) 2003 John Darrington # Scs , 2004. # msgid "" msgstr "" "Project-Id-Version: Gnubik\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2003-12-23 08:31+0100\n" "Last-Translator: Scs \n" "Language-Team: Catalonia is not Spain \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.0.2\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Selector de la imatge" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Imatge" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Selector de color" #: src/colour-dialog.c:314 msgid "Image" msgstr "Imatge" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Se_leccionar" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Seleccionar un arxiu imatge" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "En _mosaic" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Posar una còpia de la imatge\n" "a cada bloc" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Ajustat" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Posar una còpia de la imatge sobre\n" "tota la cara del cub" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Utilitzar una imatge sobre la cara del cub" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Mida del cub:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Estableix el nombre de blocs a cada costat" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Joc/_Nou Joc" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensions" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, fuzzy, c-format msgid "Moves: %d / %d" msgstr "Moviments: %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cub resolt en %d moviment" msgstr[1] "Cub resolt en %d moviments" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "El cub no s'ha resolt! Els colors són correctes, però l'orientació no ho és." #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Joc" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_Ajuda" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Opcions" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Joc/_Nou Joc" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Color" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Animació" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Més ràpid" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Més lent" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" #: src/menus.c:462 msgid "Back" msgstr "" #: src/menus.c:463 msgid "Make one step backwards" msgstr "" #: src/menus.c:468 msgid "Stop" msgstr "" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "" #: src/menus.c:475 msgid "Mark" msgstr "" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" #: src/menus.c:482 msgid "Forward" msgstr "" #: src/menus.c:483 msgid "Make one step forwards" msgstr "" #: src/menus.c:488 msgid "Play" msgstr "" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Una mostra del color o patró. Pot polsar i seleccionar un color nou o patró, " "o bé arrossegar-ne un a aquest espai." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf té un nombre de canals incorrecte" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf té un espai de color desconegut: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Impossible crear la imatge a partir de l'arxiu %s:%s" #~ msgid "Pattern" #~ msgstr "Patró" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Cliqui aquí­ per a aplicar un patró a la superfície del cub" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Controla la velocitat de gir de les seccions" #~ msgid "Preferences" #~ msgstr "Preferències" #~ msgid "Lighting" #~ msgstr "Il·luminació" #~ msgid "Enable lighting" #~ msgstr "Habilitar la il·luminació" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Fa que el cub apareixi il·luminat" #~ msgid "Start cube with new settings?" #~ msgstr "Iniciar el cub amb les noves opcions?" #~ msgid "/_Game/sep" #~ msgstr "/_Joc/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Joc/_Sortir" #~ msgid "/_Settings" #~ msgstr "/_Opcions" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Opcions/_Preferències" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Opcions/_Colors" #~ msgid "/_Help/_About" #~ msgstr "/_Ajuda/_Sobre" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Opcions" gnubik-2.4.3/po/da.po0000644000175000017460000002012313070436577011301 00000000000000# Danish translation GNUbik. # Copyright (C) 2015 GNUbik og nedenstående oversættere. # This file is distributed under the same license as the gnubik package. # Bjarke Freund-Hansen , 2003. # Joe Hansen , 2010, 2011, 2015. # korrekturlæst Torben Grøn Helligsø, Ask Hjort Larsen. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-05-01 18:07+0200\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Billedvælger" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Alle billeder" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Alle filer" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Farvevælger" #: src/colour-dialog.c:314 msgid "Image" msgstr "Billede" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Vælg" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Vælg en billedfil" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Fliselagt" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Placer en kopi af billedet på hver blok" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaik" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Placer en kopi af billedet over hele kubens side" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Almindelig" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Fjern billede fra kubens side" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Kubens størrelse:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "_Regulær kube" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Angiver antallet af blokke på hver side" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Tillad kun kuber hvor alle sider har samme størrelse" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Et tænkespil med en magisk terning i 3D" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Joe Hansen - 2010, 2011, 2015.\n" "\n" "Dansk-gruppen \n" "Mere info: http://www.dansk-gruppen.dk" #: src/dialogs.c:189 msgid "New Game" msgstr "Nyt spil" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensioner" #: src/dialogs.c:212 msgid "Initial position" msgstr "Startplacering" #: src/dialogs.c:216 msgid "_Random" msgstr "_Vilkårlig" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Løst" #: src/menus.c:94 msgid "Rear View" msgstr "Baglæns visning" #: src/menus.c:102 msgid "Bottom View" msgstr "Bundvisning" #: src/menus.c:109 msgid "Top View" msgstr "Topvisning" #: src/menus.c:117 msgid "Left View" msgstr "Visning fra venstre" #: src/menus.c:124 msgid "Right View" msgstr "Visning fra højre" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Et mærke er nu placeret ved %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Drejninger: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kube løst med %d drejning" msgstr[1] "Kube løst med %d drejninger" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Kuben er IKKE løst! Farverne er korrekte, men har forkert retning" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Animationsrate er angivet til %d billede per runde." msgstr[1] "Animationsrate er angivet til %d billeder per runde." #: src/menus.c:228 msgid "_Game" msgstr "_Spil" #: src/menus.c:229 msgid "_View" msgstr "_Visning" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Tilføj _visning" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Tilføj en hjælpevisning af kuben" #: src/menus.c:235 msgid "_Help" msgstr "_Hjælp" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "_Vis/skjul" #: src/menus.c:237 msgid "_Scripts" msgstr "_Skripter" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Genstart spil" #: src/menus.c:311 msgid "_New Game" msgstr "_Nyt spil" #: src/menus.c:315 msgid "_Rear" msgstr "_Bagende" #: src/menus.c:317 msgid "_Left" msgstr "_Venstre" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Højre" #: src/menus.c:321 msgid "_Top" msgstr "_Øverst" #: src/menus.c:323 msgid "_Bottom" msgstr "_Nederst" #: src/menus.c:328 msgid "_Colours" msgstr "_Farver" #: src/menus.c:332 msgid "_Animation" msgstr "_Animation" #: src/menus.c:336 msgid "_Faster" msgstr "_Hurtigere" #: src/menus.c:340 msgid "_Slower" msgstr "_Langsommere" #: src/menus.c:455 msgid "Rewind" msgstr "Spol tilbage" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Gå til det forrige mærke (eller begyndelsen) af drejesekvensen" #: src/menus.c:462 msgid "Back" msgstr "Tilbage" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Gå et trin tilbage" #: src/menus.c:468 msgid "Stop" msgstr "Stop" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Stop kørslen af drejningernes sekvens" #: src/menus.c:475 msgid "Mark" msgstr "Marker" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Marker det aktuelle sted i drejesekvensen" #: src/menus.c:482 msgid "Forward" msgstr "Fremad" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Gå et trin fremad" #: src/menus.c:488 msgid "Play" msgstr "Afspil" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Gå fremad igennem drejesekvensen" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik-fejl" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "En prøve på farven. Du kan klikke og vælge en ny farve, eller trække en " "farve til dette sted." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf har et forkert antal kanaler" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf har ukendt farveområde: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Fejlsøg" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Flyt" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "_Smid tilstand" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Vælg tilfældig" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Dette skript virker kun på 3×3×3 kuber." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Løsningsalgoritmer" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Hel kube" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Placering af nederste _kant" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Orientering for nederste _hjørne" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "Placering af _nederste hjørne" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "_Midterskive" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "_Øverste skive" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "_Øverste kanter" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "En 3D-magisk kube" gnubik-2.4.3/po/uk.po0000644000175000017460000002417713070436577011351 00000000000000# Ukrainian translation of gnubik. # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # # Yuri Chornoivan , 2011, 2015. msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-04-11 11:19+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 3 : n%10==1 && n%100!=11 ? 0 : n" "%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Lokalize 1.5\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Вибір зображень" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Всі зображення" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Всі файли" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Вибір кольорів" #: src/colour-dialog.c:314 msgid "Image" msgstr "Зображення" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Ви_брати" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Виберіть файл з зображенням" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "П_литка" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Розташувати копію зображення у кожному блоці" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Мозаїка" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Розташувати копію зображення на всіх боковій поверхні кубика." #: src/colour-dialog.c:342 msgid "_Plain" msgstr "З_вичайний" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Вилучити зображення з поверхні кубика" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Розмір кубика:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Зви_чайний куб" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Встановлює кількість блоків для кожного боку" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Використовувати лише кубики з однаковими розмірами сторін" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Просторова головоломка-кубик" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "Юрій Чорноіван " #: src/dialogs.c:189 msgid "New Game" msgstr "Нова гра" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Розміри" #: src/dialogs.c:212 msgid "Initial position" msgstr "Початкова позиція" #: src/dialogs.c:216 msgid "_Random" msgstr "_Випадковий" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Зібраний" #: src/menus.c:94 msgid "Rear View" msgstr "Вид ззаду" #: src/menus.c:102 msgid "Bottom View" msgstr "Вид знизу" #: src/menus.c:109 msgid "Top View" msgstr "Вид зверху" #: src/menus.c:117 msgid "Left View" msgstr "Вид з лівого боку" #: src/menus.c:124 msgid "Right View" msgstr "Вид з правого боку" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Позначку тепер встановлено на позицію %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Обертання: %d з %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Кубик зібрано за %d обертання" msgstr[1] "Кубик зібрано за %d обертання" msgstr[2] "Кубик зібрано за %d обертань" msgstr[3] "Кубик зібрано за одне обертання" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Кубик не зібрано! Кольори вказано правильно, але орієнтація помилкова." #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Встановлено частоту кадрів %d кадр на обертання." msgstr[1] "Встановлено частоту кадрів %d кадри на обертання." msgstr[2] "Встановлено частоту кадрів %d кадрів на обертання." msgstr[3] "Встановлено частоту кадрів один кадр на обертання." #: src/menus.c:228 msgid "_Game" msgstr "_Гра" #: src/menus.c:229 msgid "_View" msgstr "П_ерегляд" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Додати п_ерегляд" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Додати допоміжний перегляд кубика" #: src/menus.c:235 msgid "_Help" msgstr "_Довідка" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "По_казати/Сховати" #: src/menus.c:237 msgid "_Scripts" msgstr "С_крипти" #: src/menus.c:307 msgid "_Restart Game" msgstr "Пе_резапустити гру" #: src/menus.c:311 msgid "_New Game" msgstr "_Нова гра" #: src/menus.c:315 msgid "_Rear" msgstr "Зз_аду" #: src/menus.c:317 msgid "_Left" msgstr "_Ліворуч" #: src/menus.c:319 msgid "Ri_ght" msgstr "Пр_аворуч" #: src/menus.c:321 msgid "_Top" msgstr "З_гори" #: src/menus.c:323 msgid "_Bottom" msgstr "З_низу" #: src/menus.c:328 msgid "_Colours" msgstr "К_ольори" #: src/menus.c:332 msgid "_Animation" msgstr "_Анімація" #: src/menus.c:336 msgid "_Faster" msgstr "_Швидше" #: src/menus.c:340 msgid "_Slower" msgstr "П_овільніше" #: src/menus.c:455 msgid "Rewind" msgstr "Повний назад" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" "Перейти до попередньої позначки (або до початку) послідовності обертань" #: src/menus.c:462 msgid "Back" msgstr "Назад" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Повернутися на одне обертання назад" #: src/menus.c:468 msgid "Stop" msgstr "Зупинити" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Припинити виконання послідовності обертань" #: src/menus.c:475 msgid "Mark" msgstr "Позначити" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Встановити позначку на поточній позиції у послідовності обертань" #: src/menus.c:482 msgid "Forward" msgstr "Вперед" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Виконати наступне обертання" #: src/menus.c:488 msgid "Play" msgstr "Пуск" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Запустити послідовність обертань" #: src/menus.c:555 msgid "Gnubik error" msgstr "Помилка Gnubik" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Зразок кольору. Натисніть, щоб вибрати інший колір або перетягніть пункт " "кольору на це місце." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "У буфері растру помилкова кількість каналів" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "У буфері растру зображення з невідомого простору кольорів: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "Ді_агностика" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Хід" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "За_писати стан" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "Зап_лутати" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Цей скрипт може працювати лише з кубиками 3×3×3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Розв’язувачі" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Весь кубик" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Нижній _крайовий елемент" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Орієнтація нижнього _бокового елемента" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "_Нижній кутовий елемент" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "_Середній шар" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "_Верхній шар" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "_Верхні краї" #~ msgid "GNUbik" #~ msgstr "GNUbik" #~ msgid "A 3D magic cube puzzle" #~ msgstr "Просторова головоломка — магічний кубик" #~ msgid "_Animated" #~ msgstr "_Анімація" #~ msgid "_Fast" #~ msgstr "_Швидко" gnubik-2.4.3/po/ar.po0000644000175000017460000002341713070436577011330 00000000000000# Arabic translation for gnubik # Copyright (C) 2015 John Darrington # This file is distributed under the same license as the gnubik package. # Abdo Alrhman Aiman , 2015. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4.2-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2015-04-10 18:32+0200\n" "PO-Revision-Date: 2015-04-16 14:16+0200\n" "Last-Translator: Abdo Alrhman Aiman \n" "Language-Team: Arabic <(nothing)>\n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Virtaal 0.7.1\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "تحديد صورة" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "الصور فقط" #: src/colour-dialog.c:214 msgid "All Files" msgstr "كافة الملفات" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "إِعدادات" #: src/colour-dialog.c:314 msgid "Image" msgstr "تحديد صورة" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_تصفَّح..." #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "تحديد صورة واِستخدامها بدلًا عن اللون" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_كاملة" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "وَضْع الصورة كاملة على كل جزء" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "مُقطَّعة" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "وَضْع قطعة من الصورة على كل جزء" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "اِ_حذف الصورة" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "حَذْف الصورة واِستعادة اللون" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "حَجْم المكعَّب:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "اِجعل الجوانب متساوية (مُستحسَّن)" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "تحديد عدد اﻷَجزاء الموجودة في كل جانب" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" "مَنْع إِنشاء المكعَّبات غريبة الشكل،\n" "إِذ يُبقيها هذا الخيار متساوية الجوانب (مُستحسَّن)" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "اِلعَب بمكعَّب روبِك على الحاسوب" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "عبد الرحمن أَيمن " #: src/dialogs.c:189 msgid "New Game" msgstr "تخصيص مكعَّب" #: src/dialogs.c:201 msgid "Dimensions" msgstr "" "التحجيم:\n" "(سيُطبَّق كل تختارهُ هنا عند نقركَ على \"مكعَّب عشوائيّ\" من قائمة \"اللعبة\")" #: src/dialogs.c:212 msgid "Initial position" msgstr "الحالة:" #: src/dialogs.c:216 msgid "_Random" msgstr "_غير محلول" #: src/dialogs.c:220 msgid "_Solved" msgstr "_محلول" #: src/menus.c:94 msgid "Rear View" msgstr "الخلف" #: src/menus.c:102 msgid "Bottom View" msgstr "اﻷَسفل" #: src/menus.c:109 msgid "Top View" msgstr "اﻷَعلى" #: src/menus.c:117 msgid "Left View" msgstr "اليسار" #: src/menus.c:124 msgid "Right View" msgstr "اليمين" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "تم وَسْم الخطوة رقم %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "الخطوات: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "تهانينا، لقد أَنهيتَ المكعَّب في 0 خطوات." msgstr[1] "تهانينا، لقد أَنهيتَ المكعَّب في خطوة واحدة." msgstr[2] "تهانينا، لقد أَنهيتَ المكعَّب في خطوتان." msgstr[3] "تهانينا، لقد أَنهيتَ المكعَّب في %d خطوات." msgstr[4] "تهانينا، لقد أَنهيتَ المكعَّب في %d خطواتًا." msgstr[5] "تهانينا، لقد أَنهيتَ المكعَّب في %d خطوة." #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "أَسرَع ما يُمكِن!" msgstr[1] "إِطارٌ واحد في كل خطوة" msgstr[2] "إِطاران في كل خطوة." msgstr[3] "%d إِطارات في كل خطوة." msgstr[4] "%d إِطاراتًا في كل خطوة." msgstr[5] "%d إِطار في كل خطوة." #: src/menus.c:228 msgid "_Game" msgstr "ا_للعبة" #: src/menus.c:229 msgid "_View" msgstr "_عرض" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "_شاهِد المكعَّب" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "مشاهدة المكعَّب من زاوية مختلفة" #: src/menus.c:235 msgid "_Help" msgstr "_تعليمات" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "" #: src/menus.c:237 msgid "_Scripts" msgstr "آليَّا_ت" #: src/menus.c:307 msgid "_Restart Game" msgstr "معكَّب _عشوائيّ" #: src/menus.c:311 msgid "_New Game" msgstr "_خصِّص مكعَّب" #: src/menus.c:315 msgid "_Rear" msgstr "مِنَ ال_خلف" #: src/menus.c:317 msgid "_Left" msgstr "مِنَ ال_يسار" #: src/menus.c:319 msgid "Ri_ght" msgstr "مِنَ ال_يمين" #: src/menus.c:321 msgid "_Top" msgstr "مِنَ الأَ_على" #: src/menus.c:323 msgid "_Bottom" msgstr "مِنَ الأَ_سفل" #: src/menus.c:328 msgid "_Colours" msgstr "إِ_عدادات" #: src/menus.c:332 msgid "_Animation" msgstr "_سرعة المكعَّب" #: src/menus.c:336 msgid "_Faster" msgstr "أَ_سرع" #: src/menus.c:340 msgid "_Slower" msgstr "أَ_بطىء" #: src/menus.c:455 msgid "Rewind" msgstr "" "أقرَب\n" "وَسَم" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "الذهاب إِلى أَقرَب وَسَم، علمًا أَنَ المكعَّب يَوسِم نفسهُ آليًا عند البداية" #: src/menus.c:462 msgid "Back" msgstr "" "الخطوة\n" "السابقة" #: src/menus.c:463 msgid "Make one step backwards" msgstr "الرجوع إلى الخطوة السابقة" #: src/menus.c:468 msgid "Stop" msgstr "توقَّف" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "إِيقاف المكعَّب" #: src/menus.c:475 msgid "Mark" msgstr "اِوسِمْ" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" "القيام بوَسْم الخطوة الحالية، يمكنك الرجوع إلى الوَسَم لاحقًا بالنقر على زِر " "\"أَقرَب وَسَم\"" #: src/menus.c:482 msgid "Forward" msgstr "" "الخطوة\n" "التالية" #: src/menus.c:483 msgid "Make one step forwards" msgstr "الذهاب إِلى الخطوة التالية" #: src/menus.c:488 msgid "Play" msgstr "" "الخطوة\n" "اﻷَصليَّة" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "الذهاب إلى الخطوة التي تركتَ المكعَّب فيها" #: src/menus.c:555 msgid "Gnubik error" msgstr "خطأ" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "التلاعُب بكل اﻷَجزاء التي تحمل هذا اللون، حيثُ يمكنكَ تغيير لون الجزء (بواسطة " "عجلة اﻷَلوان أَدناهُ) أَو اِستبدالهُ بصورة (بواسطة زِر \"حدِّد صورة\")" #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_تحريك آليّ" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "_~a مِنَ الحركات اﻵليَّة" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "عذرًا، خاصية الحل اﻵليّ لا تعمل سوى مع المكعَّبات 3x3x3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_الحل اﻵليّ" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3x3x3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_كامل المكعَّب" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "GNUbik" #~ msgstr "غِنوْبِكْ" #~ msgid "A 3D magic cube puzzle" #~ msgstr "اِلعَب بمكعَّب روبِك" gnubik-2.4.3/po/hr.po0000644000175000017460000001765313070436577011344 00000000000000# Translation of gnubik to Croatian. # Copyright (C) 2012 John Darrington # This file is distributed under the same license as the gnubik package. # Tomislav Krznar , 2012. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2012-04-16 18:44+0200\n" "Last-Translator: Tomislav Krznar \n" "Language-Team: Croatian \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Izbornik slika" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Sve slike" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Sve datoteke" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Izbornik boja" #: src/colour-dialog.c:314 msgid "Image" msgstr "Slika" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Odaberi" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Odaberite datoteku slike" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Popločeno" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Postavite kopiju slike na svaki blok" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mozaik" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Postavite kopiju slike preko površine kocke" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Obično" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Ukloni sliku s površine kocke" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Veličina kocke:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Ob_ična kocka" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Postavlja broj blokova na svakoj plohi" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Dozvoli samo kocke s jednakim svim plohama" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Slagalica trodimenzionalne čarobne kocke" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "Tomislav Krznar, , 2012." #: src/dialogs.c:189 msgid "New Game" msgstr "Nova igra" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Veličina" #: src/dialogs.c:212 msgid "Initial position" msgstr "Početna pozicija" #: src/dialogs.c:216 msgid "_Random" msgstr "_Slučajno" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Riješeno" #: src/menus.c:94 msgid "Rear View" msgstr "Pogled sa stražnje strane" #: src/menus.c:102 msgid "Bottom View" msgstr "Pogled s donje strane" #: src/menus.c:109 msgid "Top View" msgstr "Pogled s gornje strane" #: src/menus.c:117 msgid "Left View" msgstr "Pogled s lijeve strane" #: src/menus.c:124 msgid "Right View" msgstr "Pogled s desne strane" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Postavljena je oznaka na mjestu %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Poteza: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kocka je složena u %d potezu" msgstr[1] "Kocka je složena u %d poteza" msgstr[2] "Kocka je složena u %d poteza" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Kocka NIJE složena! Boje su točne, ali imaju neispravnu orijentaciju" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Brzina animacije postavljena na %d okvir po okretu." msgstr[1] "Brzina animacije postavljena na %d okvira po okretu." msgstr[2] "Brzina animacije postavljena na %d okvira po okretu." #: src/menus.c:228 msgid "_Game" msgstr "_Igra" #: src/menus.c:229 msgid "_View" msgstr "_Pogled" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Dodaj _pogled" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Dodaj pomoćni pogled na kocku" #: src/menus.c:235 msgid "_Help" msgstr "_Pomoć" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "Pri_kaži/Sakrij" #: src/menus.c:237 msgid "_Scripts" msgstr "_Skripte" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Ponovo pokreni igru" #: src/menus.c:311 msgid "_New Game" msgstr "_Nova igra" #: src/menus.c:315 msgid "_Rear" msgstr "_Stražnji" #: src/menus.c:317 msgid "_Left" msgstr "_Lijevi" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Desni" #: src/menus.c:321 msgid "_Top" msgstr "_Gornji" #: src/menus.c:323 msgid "_Bottom" msgstr "_Donji" #: src/menus.c:328 msgid "_Colours" msgstr "_Boje" #: src/menus.c:332 msgid "_Animation" msgstr "_Animacija" #: src/menus.c:336 msgid "_Faster" msgstr "_Brže" #: src/menus.c:340 msgid "_Slower" msgstr "_Sporije" #: src/menus.c:455 msgid "Rewind" msgstr "Vrati" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Idi na prethodnu oznaku (ili početak) niza poteza" #: src/menus.c:462 msgid "Back" msgstr "Natrag" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Vrati se potez unatrag" #: src/menus.c:468 msgid "Stop" msgstr "Zaustavi" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Zaustavi izvršavanje niza poteza" #: src/menus.c:475 msgid "Mark" msgstr "Označi" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Označi trenutno mjesto u nizu poteza" #: src/menus.c:482 msgid "Forward" msgstr "Naprijed" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Pomakni se korak naprijed" #: src/menus.c:488 msgid "Play" msgstr "Igraj" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Idi naprijed kroz niz poteza" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik greška" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Uzorak boje. Možete kliknuti i odabrati novu boju ili povući u ovaj prostor." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf ima neispravan broj kanala" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf ima nepoznat prostor boja: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Debug" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Pomakni" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "_Izbaci stanje" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Slučajno rasporedi" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Skripta radi samo na 3x3x3 kockama." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Rješavanje" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Potpuna kocka" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Pozicija _donjeg ruba" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Orijentacija donjeg _kuta" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "_Pozicija donjeg kuta" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "_Srednji dio" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "_Gornji dio" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "_Gornji rubovi" gnubik-2.4.3/po/bg.po0000644000175000017460000002340313070436577011311 00000000000000# Bulgarian translations for GNUbik # Copyright (C) 2008 John Darrington # This file is distributed under the same license as the GNUbik package. # Ivaylo Valkov , 2008. # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2008-12-05 13:55+0200\n" "Last-Translator: Ivaylo Valkov \n" "Language-Team: Bulgarian \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Избор на изображение" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Всички изображения" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Всички файлове" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Избор на цвят" #: src/colour-dialog.c:314 msgid "Image" msgstr "Изображение" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Избор" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Избор на файл с изображение" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "На _плочки" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Поставяне на копие от\n" "изображението върху всяко блокче" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Мозайка" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Поставяне на копие от\n" "изображението върху целия куб" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Използване на изображение върху повъхността на куба" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Големина на куба:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Задаване на броя на блокчетата във всяка страна" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Игра/_Нова игра" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Размери" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Ходове: %d / %d " #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Кубът беше решен с %d ход" msgstr[1] "Кубът беше решен с %d хода" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Кубът не е решен. Цветовете са правилни, но имат сгрешено насочване" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Игра" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/Помо_щ" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Настройки/П_оказване\\/Скриване" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Игра/_Нова игра" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Цвят" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Анимация" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "По-бързо" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "По-бавно" #: src/menus.c:455 msgid "Rewind" msgstr "Превъртане назад" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" "Отиване на предната отметка (или в началото) от последователността от ходове" #: src/menus.c:462 msgid "Back" msgstr "Назад" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Показване на предишния ход" #: src/menus.c:468 msgid "Stop" msgstr "Спиране" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Спиране на последователността от ходове" #: src/menus.c:475 msgid "Mark" msgstr "Отметка" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Създаване на отметка от текущия ход" #: src/menus.c:482 msgid "Forward" msgstr "Напред" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Показване на следващия ход" #: src/menus.c:488 msgid "Play" msgstr "Изпълнение" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Преминаване през последователността от ходове" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Мостра на цвета или шарката. Натиснете за избор на цвят или шарка, или ги " "довлачете до тук." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Изображението е с неточен брой канали" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Изображението е с неизвестно цветно пространство: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Неуспех при създаване на изображение от файл %s: %s" #~ msgid "Pattern" #~ msgstr "Шарка" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Използване на шарката върху повърхността на куба" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Задаване на скоростта, с която частите се завъртат" #~ msgid "Preferences" #~ msgstr "Настройки" #~ msgid "Lighting" #~ msgstr "Осветление" #~ msgid "Enable lighting" #~ msgstr "Включване на осветлението" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Кубът изглежда осветен" #~ msgid "Start cube with new settings?" #~ msgstr "Да се създаде ли куб с нови настройки?" #~ msgid "_Play Toolbar" #~ msgstr "Лен_та с инструменти" #~ msgid "_Status Bar" #~ msgstr "Лента за _състоянието" #~ msgid "/_Game/sep" #~ msgstr "/_Игра/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Игра/_Спиране на програмата" #~ msgid "/_Settings" #~ msgstr "/_Настройки" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Настройки/_Предпочитания" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Настройки/_Цветове" #~ msgid "/_Help/_About" #~ msgstr "/Помо_щ/_Относно" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Настройки/Показване\\/Скриване" gnubik-2.4.3/po/el.po0000644000175000017460000002352513070436577011326 00000000000000# Greek translation of GNUbik # Copyright (C) 2003 John Darrington # Anastasios M. Pingios , 2007. # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2010-12-11 14:01+0100\n" "PO-Revision-Date: 2007-10-11 03:25+0200\n" "Last-Translator: Anastasios M. Pingios \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Επιλογή Εικόνας" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Εικόνα" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Επιλογή χρώματος" #: src/colour-dialog.c:314 msgid "Image" msgstr "Εικόνα" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Επι_λογή" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Επιλέξτε μία εικόνα" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Επιστρωμένος" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Τοποθετήστε ένα αντίγραφο της εικόνας\n" "σε κάθε τμήμα" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Μοτίβο" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Τοποθετήστε ένα αντίγραφο της εικόνας κατά μήκος\n" "ολόκληρου του κύβου" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Χρήση μιας εικόνας στον κύβο" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Μέγεθος του κύβου:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Ορίζει τον αριθμό των τμημάτων σε κάθε πλευρά" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Παιχνίδι/_Νέο Παιχνίδι" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Διαστάσεις" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Κινήσεις: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Ο κύβος λύθηκε με %d κίνηση" msgstr[1] "Ο κύβος λύθηκε με %d κινήσεις" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Ο κύβος ΔΕΝ έχει λυθεί! Τα χρώματα είναι σωστά, αλλά έχουν λάθος " "προσανατολισμό." #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Παιχνίδι" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_Βοήθεια" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Ρυθμίσεις/Εμφά_νιση\\/Απόκρυψη" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Παιχνίδι/_Νέο Παιχνίδι" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Χρώμα" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Animation" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Γρηγορότερα" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Πιο αργά" #: src/menus.c:455 msgid "Rewind" msgstr "Ξανατύλιξε" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Πήγαινε στο προηγούμενο σημείο (ή στην αρχή) της ακολουθίας κινήσεων" #: src/menus.c:462 msgid "Back" msgstr "Πίσω" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Κάνε ένα βήμα πίσω" #: src/menus.c:468 msgid "Stop" msgstr "Σταμάτα" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Σταμάτα την εκτέλεση της ακολουθίας κινήσεων" #: src/menus.c:475 msgid "Mark" msgstr "Σημείωσε" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Σημείωσε το τρέχον σημείο στην ακολουθία κινήσεων" #: src/menus.c:482 msgid "Forward" msgstr "Μπροστά" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Κάνε ένα βήμα μπροστά" #: src/menus.c:488 msgid "Play" msgstr "Παίξε" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Προχωρήστε μπρόστα στην ακολουθία κινήσεων" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Ένα δείγμα του χρώματος ή του μοτίβου. Μπορείτε να κάνετε κλικ και επιλογή " "ενός νέου χρώματος ή μοτίβου, ή να σύρετε ένα σε αυτό το κενό." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Το Pixbuf έχει λανθασμένο αριθμό καναλιών" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Το Pixbuf έχει άγωστο εύρος χρωμάτων: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Δεν είναι εφικτή η δημιουργία της εικόνας από το αρχείο %s: %s" #~ msgid "Pattern" #~ msgstr "Μοτίβο" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "" #~ "Κάντε κλικ εδώ για να χρησιμοποιήσετε κάποιο μοτίβο στην επιφάνεια του " #~ "κύβου" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Ελέγχει την ταχύτητα περιστροφής των τμημάτων" #~ msgid "Preferences" #~ msgstr "Ιδιότητες" #~ msgid "Lighting" #~ msgstr "Φωτισμός" #~ msgid "Enable lighting" #~ msgstr "Ενεργοποίηση φωτισμού" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Κάνει τον κύβο να φαίνεται φωτισμένος" #~ msgid "Start cube with new settings?" #~ msgstr "Εκκίνηση του κύβου με νέες ρυθμίσεις;" #~ msgid "_Play Toolbar" #~ msgstr "_Γραμμή Παιχνιδιού" #~ msgid "_Status Bar" #~ msgstr "_Γραμμή Κατάστασης" #~ msgid "/_Game/sep" #~ msgstr "/_Παιχνίδι/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Παιχνίδι/_Τερματισμός" #~ msgid "/_Settings" #~ msgstr "/_Ρυθμίσεις" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Ρυθμίσεις/_Ιδιότητες" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Ρυθμίσεις/_Χρώματα" #~ msgid "/_Help/_About" #~ msgstr "/_Βοήθεια/_Περί" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Ρυθμίσεις/Εμφάνιση\\/Απόκρυψη" gnubik-2.4.3/po/ms.po0000644000175000017460000002002213070436577011332 00000000000000# Duit PPRT siapa yang kebas???? # Copyright (C) 2003 John Darrington # Hasbullah Bin Pit (sebol) , 2003. # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2009-01-06 11:48+0900\n" "PO-Revision-Date: 2003-08-09 03:18+0800\n" "Last-Translator: Hasbullah Bin Pit \n" "Language-Team: Projek Gabai \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n>1\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Pemilih Imej" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 #, fuzzy msgid "All Images" msgstr "Imej" #: src/colour-dialog.c:214 msgid "All Files" msgstr "" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Pemilih warna" #: src/colour-dialog.c:314 msgid "Image" msgstr "Imej" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Pi_lih" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Pilih fail imej" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Berulang" #: src/colour-dialog.c:327 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Letak salinan bagi imej\n" " pada setiap blok" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mozek" #: src/colour-dialog.c:336 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Letak salinan bagi imej merentasi\n" "seluruh permukaan kiub" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "" #: src/colour-dialog.c:345 #, fuzzy msgid "Remove image from the cube face" msgstr "Guna fail imej pada permukaan kiub" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Saiz kiub:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Tetapkan bilangan blok pada setiap tepian" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" #: src/dialogs.c:189 #, fuzzy msgid "New Game" msgstr "/_Permainan/Permainan Ba_ru" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensi" #: src/dialogs.c:212 msgid "Initial position" msgstr "" #: src/dialogs.c:216 msgid "_Random" msgstr "" #: src/dialogs.c:220 msgid "_Solved" msgstr "" #: src/menus.c:94 msgid "Rear View" msgstr "" #: src/menus.c:102 msgid "Bottom View" msgstr "" #: src/menus.c:109 msgid "Top View" msgstr "" #: src/menus.c:117 msgid "Left View" msgstr "" #: src/menus.c:124 msgid "Right View" msgstr "" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "" #: src/menus.c:152 #, fuzzy, c-format msgid "Moves: %d / %d" msgstr "Pergerakkan: %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Kiub diselesaikan dalam %d pergerakan" msgstr[1] "Kiub diselesaikan dalam %d pergerakan" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Kiub TAK selesai! Warna adalag betul, tapi mempunyai orientasi salah" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "" msgstr[1] "" # libgnomeui/gnome-app-helper.c:91 #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Permainan" #: src/menus.c:229 msgid "_View" msgstr "" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:235 #, fuzzy msgid "_Help" msgstr "/_Bantuan" #: src/menus.c:236 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Tetapan" #: src/menus.c:237 msgid "_Scripts" msgstr "" #: src/menus.c:307 msgid "_Restart Game" msgstr "" #: src/menus.c:311 #, fuzzy msgid "_New Game" msgstr "/_Permainan/Permainan Ba_ru" #: src/menus.c:315 msgid "_Rear" msgstr "" #: src/menus.c:317 msgid "_Left" msgstr "" #: src/menus.c:319 msgid "Ri_ght" msgstr "" #: src/menus.c:321 msgid "_Top" msgstr "" #: src/menus.c:323 msgid "_Bottom" msgstr "" #: src/menus.c:328 #, fuzzy msgid "_Colours" msgstr "Warna" #: src/menus.c:332 #, fuzzy msgid "_Animation" msgstr "Animasi" #: src/menus.c:336 #, fuzzy msgid "_Faster" msgstr "Lebih pantas" #: src/menus.c:340 #, fuzzy msgid "_Slower" msgstr "Lebih perlahan" #: src/menus.c:455 msgid "Rewind" msgstr "" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" #: src/menus.c:462 msgid "Back" msgstr "" #: src/menus.c:463 msgid "Make one step backwards" msgstr "" #: src/menus.c:468 msgid "Stop" msgstr "" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "" #: src/menus.c:475 msgid "Mark" msgstr "" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "" #: src/menus.c:482 msgid "Forward" msgstr "" #: src/menus.c:483 msgid "Make one step forwards" msgstr "" #: src/menus.c:488 msgid "Play" msgstr "" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "" #: src/menus.c:555 msgid "Gnubik error" msgstr "" #: src/swatch.c:132 #, fuzzy msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Contoh bagi warna atau corak. Anda boleh klik dan pilih warna atau corak " "baru, atau heret ke ruang ini." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf mempunyai bilangan saluran yang salah" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf mempunyai ruangwarna tak kenali: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "" #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Tidak dapat cipta imej drpd fail %s: %s" #~ msgid "Pattern" #~ msgstr "Corak" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Klik sini untuk mengguna corak pada permukaan kiub\"" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Kawal kelajuan yang mengilas cebisan" #~ msgid "Preferences" #~ msgstr "Keutamaan" #~ msgid "Lighting" #~ msgstr "Pencahayaan" #~ msgid "Enable lighting" #~ msgstr "Hidupkan pencahayaan" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Jadikan kuib nampak beriluminasi" #~ msgid "Start cube with new settings?" #~ msgstr "Mula kiub dengan tetapan baru?" #~ msgid "/_Game/sep" #~ msgstr "/_Permainan/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Permainan/_Keluar" #~ msgid "/_Settings" #~ msgstr "/_Tetapan" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Tetapan/Ke_utamaan" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Tetapan/_Warna" #~ msgid "/_Help/_About" #~ msgstr "/_Bantuan/_Perihal" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Tetapan" gnubik-2.4.3/po/de.po0000644000175000017460000002243213070436577011312 00000000000000# Message file for german version of GNUbik # Copyright (C) 2003 John Darrington # This file is distributed under the same license as the gnubik package. # John Darrington , 2003. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2011-04-24 15:20+0200\n" "Last-Translator: Martina Faust \n" "Language-Team: German \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Bildauswahl" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Alle Bilder" #: src/colour-dialog.c:214 msgid "All Files" msgstr "Alle Dateien" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Farbauswahl" #: src/colour-dialog.c:314 msgid "Image" msgstr "Bild" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "_Auswahl" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Auswahl einer Bilddatei" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Kacheln" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Projiziere das Bild auf jeden Block des Würfels" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaik" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Projiziere das Bild über den gesamten Würfel" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Einfarbig" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Entferne das Bild von der Würfeloberfläche" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Größe des Würfels:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Re_gulärer Würfel" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Bestimmt die Anzahl der Blöcke je Seite" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Erlaubt nur Würfel mit gleicher Seitengrösse" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Ein 3D Würfelpuzzle" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "Martina Faust" #: src/dialogs.c:189 msgid "New Game" msgstr "Neues Spiel" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Abmessungen" #: src/dialogs.c:212 msgid "Initial position" msgstr "Startposition" #: src/dialogs.c:216 msgid "_Random" msgstr "_Willkürlich" #: src/dialogs.c:220 msgid "_Solved" msgstr "_Gelöst" #: src/menus.c:94 msgid "Rear View" msgstr "Rückansicht" #: src/menus.c:102 msgid "Bottom View" msgstr "Ansicht von unten" #: src/menus.c:109 msgid "Top View" msgstr "Ansicht von oben" #: src/menus.c:117 msgid "Left View" msgstr "Ansicht von links" #: src/menus.c:124 msgid "Right View" msgstr "Ansicht von rechts" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Ein Marker ist auf %d gesetzt." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Züge: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Würfel in %d Zug gelöst" msgstr[1] "Würfel in %d Zügen gelöst" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Der Würfel ist NICHT gelöst! Die Farben stimmen zwar, sind aber falsch " "ausgerichtet" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Bildfrequenz wurde auf %d Bild pro Drehung eingestellt." msgstr[1] "Bildfrequenz wurde auf %d Bilder pro Drehung eingestellt." #: src/menus.c:228 msgid "_Game" msgstr "_Spiel" #: src/menus.c:229 msgid "_View" msgstr "_Ansicht" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "_Ansicht hinzufügen" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Eine zusätzliche Ansicht des Würfels hinzufügen" #: src/menus.c:235 msgid "_Help" msgstr "_Hilfe" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "_Zeigen/Verbergen" #: src/menus.c:237 msgid "_Scripts" msgstr "_Skript" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Spiel neu starten" #: src/menus.c:311 msgid "_New Game" msgstr "_Neues Spiel" #: src/menus.c:315 msgid "_Rear" msgstr "Von _hinten" #: src/menus.c:317 msgid "_Left" msgstr "Von _links" #: src/menus.c:319 msgid "Ri_ght" msgstr "Von _rechts" #: src/menus.c:321 msgid "_Top" msgstr "Von _oben" #: src/menus.c:323 msgid "_Bottom" msgstr "Von _unten" #: src/menus.c:328 msgid "_Colours" msgstr "_Farben" #: src/menus.c:332 msgid "_Animation" msgstr "_Animation" #: src/menus.c:336 msgid "_Faster" msgstr "_Schneller" #: src/menus.c:340 msgid "_Slower" msgstr "_Langsamer" #: src/menus.c:455 msgid "Rewind" msgstr "Zurückspulen" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "Gehe zum vorherigen Marker (oder dem Anfang) der Zugabfolge" #: src/menus.c:462 msgid "Back" msgstr "Zurück" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Mache einen Schritt zurück" #: src/menus.c:468 msgid "Stop" msgstr "Stop" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Halte den Lauf der Zugabfolge an" #: src/menus.c:475 msgid "Mark" msgstr "Markieren" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Markiere die aktuelle Stelle in der Zugabfolge" #: src/menus.c:482 msgid "Forward" msgstr "Vor" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Mache einen Schritt voran" #: src/menus.c:488 msgid "Play" msgstr "Abspielen" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Gehe vorwärts durch die Zugabfolge" #: src/menus.c:555 msgid "Gnubik error" msgstr "Gnubik Fehler" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Farb- bzw. Mustervorschau. Um eine neue Farbe oder ein neues Muster " "auszuwählen, können Sie klicken und eine neue Farbe oder ein neues Muster " "hierauf ziehen." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Die Bilddaten haben eine falsche Anzahl an Kanälen." #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Die Bilddaten verwenden einen unbekannten Farbraum: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Fehler Diagnose" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Drehen" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "Ausgabe des _Zustandes" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "Zufällig _anordnen" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Dieses Skript funktioniert nur mit 3×3×3 Würfeln." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Lösungsberechner" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3×3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Kompletter Würfel" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Untere _Kanten einstellen" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "Untere _Ecken orientieren" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "_Untere Ecken einstellen" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "_Mittlere Ebene" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "_Obere Ebene" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "Obere _Kanten" #~ msgid "Cannot create image from file %s: %s" #~ msgstr "Erstellung eines Bildes aus der Datei %s ist nicht möglich: %s" #~ msgid "Pattern" #~ msgstr "Muster" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Klicken Sie hier, um der Würfeloberfläche ein Muster zuzuweisen" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Stellt die Rotationsgeschwindigkeit der Scheiben ein" #~ msgid "Preferences" #~ msgstr "Einstellungen" #~ msgid "Lighting" #~ msgstr "Beleuchtung" #~ msgid "Enable lighting" #~ msgstr "Beleuchtung aktivieren" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Lässt den Würfel beleuchtet aussehen" #~ msgid "Start cube with new settings?" #~ msgstr "Mit den neuen Einstellungen anfangen?" #~ msgid "_Play Toolbar" #~ msgstr "_Abspielen-Werkzeugleiste" #~ msgid "_Status Bar" #~ msgstr "S_tatus-Werkzeugleiste" #~ msgid "/_Game/sep" #~ msgstr "/_Spiel/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Spiel/_Beenden" #~ msgid "/_Settings" #~ msgstr "/E_instellungen" #~ msgid "/_Settings/_Preferences" #~ msgstr "/E_instellungen/E_instellungen" #~ msgid "/_Settings/_Colours" #~ msgstr "/E_instellungen/_Farben" #~ msgid "/_Help/_About" #~ msgstr "/_Hilfe/_Info" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/Einstellungen/Zeigen\\/Verstecken" gnubik-2.4.3/po/it.po0000644000175000017460000002016013070436577011332 00000000000000# Italian translation of GNUbik. # Copyright (C) 2003, 2011 John Darrington # This file is distributed under the same license as the GNUbik package. # Marco Ciampa , 2003. # Fabio Pirola , 2012. msgid "" msgstr "" "Project-Id-Version: gnubik 2.4\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2012-11-26 21:57+0100\n" "Last-Translator: Fabio Pirola \n" "Language-Team: Italian \n" "Language: It\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Selettore di immagine" #. TRANSLATORS: "All Images" implies nothing but images! #: src/colour-dialog.c:210 msgid "All Images" msgstr "Tutte le immagini" #: src/colour-dialog.c:214 msgid "All Files" msgstr "File" #: src/colour-dialog.c:297 msgid "Colour selector" msgstr "Selettore di colori" #: src/colour-dialog.c:314 msgid "Image" msgstr "Immagine" #: src/colour-dialog.c:315 msgid "Se_lect" msgstr "Se_leziona" #: src/colour-dialog.c:323 msgid "Select an image file" msgstr "Seleziona un file immagine" #: src/colour-dialog.c:325 msgid "_Tiled" msgstr "_Piastrellato" #: src/colour-dialog.c:327 msgid "Place a copy of the image on each block" msgstr "Posiziona una copia dell'immagine per ogni blocco" #: src/colour-dialog.c:332 msgid "_Mosaic" msgstr "_Mosaico" #: src/colour-dialog.c:336 msgid "Place a copy of the image across the entire face of the cube" msgstr "Posiziona una copia dell'immagine su tutta la faccia del cubo" #: src/colour-dialog.c:342 msgid "_Plain" msgstr "_Tinta unita" #: src/colour-dialog.c:345 msgid "Remove image from the cube face" msgstr "Rimuovi l'immagine dalla facciata del cubo" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Dimensione del cubo:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "Cubo nor_male" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Imposta il numero di blocchi per ogni lato" #: src/dialogs.c:121 msgid "Allow only cubes with all sides equal size" msgstr "Permetti solo cubi con tutti i lati di eguale dimensione" #: src/dialogs.c:164 msgid "A 3 dimensional magic cube puzzle" msgstr "Rompicapo di un cubo magico a 3 dimensioni" #. TRANSLATORS: Do not translate this string. Instead, use it to list #. the people who have helped with translation to your language. #: src/dialogs.c:169 msgid "translator-credits" msgstr "" "Marco Ciampa , 2003 Fabio Pirola , " "2012" #: src/dialogs.c:189 msgid "New Game" msgstr "Nuovo gioco" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensioni" #: src/dialogs.c:212 msgid "Initial position" msgstr "Posizione iniziale" #: src/dialogs.c:216 msgid "_Random" msgstr "_Casuale" #: src/dialogs.c:220 msgid "_Solved" msgstr "Ri_soluzione" #: src/menus.c:94 msgid "Rear View" msgstr "Vista posteriore" #: src/menus.c:102 msgid "Bottom View" msgstr "Vista dal basso" #: src/menus.c:109 msgid "Top View" msgstr "Vista dall'alto" #: src/menus.c:117 msgid "Left View" msgstr "Vista laterale sinistra" #: src/menus.c:124 msgid "Right View" msgstr "Vista laterale destra" #: src/menus.c:138 #, c-format msgid "A mark is now set at position %d." msgstr "Un contrassegno è ora impostato alla posizione %d." #: src/menus.c:152 #, c-format msgid "Moves: %d / %d" msgstr "Mosse: %d / %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cubo risolto in %d mossa" msgstr[1] "Cubo risolto in %d mosse" #: src/menus.c:183 msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Il cubo NON è stato risolto! I colori sono corretti ma hanno un orientamento " "sbagliato" #: src/menus.c:201 #, c-format msgid "Animation rate set to %d frame per turn." msgid_plural "Animation rate set to %d frames per turn." msgstr[0] "Velocità di animazione impostato ad %d fotogramma per turno." msgstr[1] "Velocità di animazione impostato a %d fotogrammi per turno." #: src/menus.c:228 msgid "_Game" msgstr "_Gioco" #: src/menus.c:229 msgid "_View" msgstr "_Vista" #. TRANSLATORS: Lets the user see the cube from a different angle #: src/menus.c:231 msgid "Add _View" msgstr "Aggiungi _vista" #: src/menus.c:232 msgid "Add an auxiliary view of the cube" msgstr "Aggiungi una vista ausiliaria del cubo" #: src/menus.c:235 msgid "_Help" msgstr "A_iuto" #: src/menus.c:236 msgid "Sho_w/Hide" msgstr "Mo_stra/Nascondi" #: src/menus.c:237 msgid "_Scripts" msgstr "_Script" #: src/menus.c:307 msgid "_Restart Game" msgstr "_Riavviare la partita" #: src/menus.c:311 msgid "_New Game" msgstr "_Nuova partita" #: src/menus.c:315 msgid "_Rear" msgstr "_Posteriore" #: src/menus.c:317 msgid "_Left" msgstr "_Sinistra" #: src/menus.c:319 msgid "Ri_ght" msgstr "_Destra" #: src/menus.c:321 msgid "_Top" msgstr "_Alto" #: src/menus.c:323 msgid "_Bottom" msgstr "_Basso" #: src/menus.c:328 msgid "_Colours" msgstr "_Colori" #: src/menus.c:332 msgid "_Animation" msgstr "_Animazione" #: src/menus.c:336 msgid "_Faster" msgstr "Più _veloce" #: src/menus.c:340 msgid "_Slower" msgstr "Più _lenta" #: src/menus.c:455 msgid "Rewind" msgstr "Riavvolgi" #: src/menus.c:456 #, fuzzy msgid "Go to the previous mark (or the beginning of the sequence of moves)" msgstr "" "Torna al precedente contrassegno (o all'inizio) della sequenza delle mosse" #: src/menus.c:462 msgid "Back" msgstr "Indietro" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Indietro di un passaggio" #: src/menus.c:468 msgid "Stop" msgstr "Ferma" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Ferma la sequenza delle mosse" #: src/menus.c:475 msgid "Mark" msgstr "Contrassegna" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Contrassegnare la corrente posizione nella sequenza delle mosse" #: src/menus.c:482 msgid "Forward" msgstr "Avanti" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Avanti di un passaggio" #: src/menus.c:488 msgid "Play" msgstr "Prosegue" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Prosegue nella sequenza delle mosse" #: src/menus.c:555 msgid "Gnubik error" msgstr "Errore di Gnubik" #: src/swatch.c:132 msgid "" "A sample of the colour. You can click and select a new colour, or drag one " "to this space." msgstr "" "Un esempio di colore. È possibile cliccare e selezionare un nuovo colore, o " "trascinarne uno in questo spazio." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf ha un numero errato di canali" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf ha uno spazio di colori sconosciuto: %d" #: scripts/debug.scm:50 msgid "_Debug" msgstr "_Debug" #: scripts/debug.scm:52 msgid "_Move" msgstr "_Mossa" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "_Dump dello stato" #: scripts/rand.scm:38 msgid "_Randomize" msgstr "_Generazione casuale" #: scripts/rand.scm:40 scripts/rand.scm:41 scripts/rand.scm:42 #: scripts/rand.scm:43 scripts/rand.scm:44 scripts/rand.scm:45 #: scripts/rand.scm:46 scripts/rand.scm:47 #, scheme-format msgid "_~a" msgstr "" #: scripts/flubrd.scm:50 msgid "This script only works on 3×3×3 cubes." msgstr "Questo script può essere utilizzato solo con cubi 3x3x3." #: scripts/mellor-solve.scm:399 msgid "_Solvers" msgstr "_Risolutori" #: scripts/mellor-solve.scm:400 msgid "_3×3" msgstr "_3x3" #: scripts/mellor-solve.scm:404 msgid "_Full cube" msgstr "_Cubo completo" #: scripts/mellor-solve.scm:407 msgid "Bottom _edge place" msgstr "Posizioni del _bordo inferiore" #: scripts/mellor-solve.scm:410 msgid "Bottom _corner orient" msgstr "_Orientamento degli angoli in basso" #: scripts/mellor-solve.scm:413 msgid "_Bottom corner place" msgstr "_Posizioni degli angoli in basso" #: scripts/mellor-solve.scm:416 msgid "_Middle slice" msgstr "Dalla parte c_entrale" #: scripts/mellor-solve.scm:419 msgid "_Top slice" msgstr "Dall'al_to" #: scripts/mellor-solve.scm:422 msgid "_Top edges" msgstr "Dai bordi _superiori" gnubik-2.4.3/THANKS0000644000175000017460000000000013070435673010636 00000000000000gnubik-2.4.3/configure.ac0000644000175000017460000000574113070437130012220 00000000000000dnl -*-m4-*- dnl GNUbik -- A 3 dimensional magic cube game. dnl Copyright (C) 1998, 2003, 2007, 2010 John Darrington dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see . dnl Process this file with autoconf to produce a configure script. AX_PREREQ(2.60) AC_INIT([GNUbik], [2.4.3], [bug-gnubik@gnu.org], [gnubik], [http://www.gnu.org/software/gnubik]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE dnl Checks for programs. AC_GNU_SOURCE AC_PROG_CC AM_PROG_CC_C_O dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST PKG_PROG_PKG_CONFIG m4_pattern_forbid([PKG_CHECK_MODULES]) AM_CONDITIONAL(cc_is_gcc, test x"$GCC" = x"yes" ) dnl Internationalization macros. AM_GNU_GETTEXT([external], [need-ngettext]) AM_GNU_GETTEXT_VERSION([0.18]) AC_ARG_ENABLE(debug, [ --enable-debug Turn on debugging], [case "${enableval}" in yes) debug=true ;; no) debug=false ;; *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; esac],[debug=false]) if test x"$debug" = x"true" ; then AC_DEFINE(DEBUG,1,[Set to 1 if debugging features should be compiled in]) fi dnl Find the X11 include and library directories AC_PATH_X AC_PATH_XTRA PKG_CHECK_MODULES(GL, gl,, AC_SEARCH_LIBS([glEnable], [GL],, AC_MSG_ERROR("No GL library seems to be installed") )) PKG_CHECK_MODULES(GLU, glu,, AC_SEARCH_LIBS([gluErrorString], [GLU],, AC_MSG_ERROR("No GLU library seems to be installed") )) dnl Checks for libraries. PKG_CHECK_MODULES(GUILE, guile-2.0,, AC_SEARCH_LIBS([scm_c_string_length], [guile],, AC_MSG_ERROR("Guile 2.0 or later is required")) ) GUILE_PROGS AC_SEARCH_LIBS([cos],[m],, AC_MSG_ERROR("No maths library present" )) PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.24.0,,) PKG_CHECK_MODULES(GDK_PIXBUF, gdk-pixbuf-2.0,,) PKG_CHECK_MODULES(GDK_GL_EXT, gdkglext-1.0,,) PKG_CHECK_MODULES(GTK_GL_EXT, gtkglext-1.0,,) dnl Glut is used only if building with debug info dnl If it's there, then include it. Otherwise don't bother if test x"$debug" = x"true" ; then PKG_CHECK_MODULES(GLUT, glut,, AC_SEARCH_LIBS([glutStrokeCharacter], [glut],, AC_MSG_ERROR("Compilation with debug was requested but no GLUT library seems to be installed")) ) fi AC_C_CONST AC_C_INLINE AC_CHECK_FUNCS(getopt_long) AC_SUBST(PACKAGE) AC_SUBST(VERSION) AC_OUTPUT(Makefile po/Makefile) gnubik-2.4.3/icons/0000755000175000017460000000000013070437266011130 500000000000000gnubik-2.4.3/icons/logo16.png0000644000175000017460000000076213070435673012672 00000000000000PNG  IHDRasRGB pHYs  IDAT8˵=H#Q`BA7Ma)DTиnvh0D PO.IIb{9{Pc1pVX-920,;+ʲsY3ZT@2"5Ǟ_r;/Hy~ nd͌w8/°gEY@Yv.53?KF5i*Ukk&o3Kvb <ݪCl(]ɸx/v'%Z2Ht3WVW"0^[79[&BGgpbpsv B\P rC#ӮUR7ڽm*_6hFH4kfBRWB OIENDB`gnubik-2.4.3/icons/logo32.png0000644000175000017460000000335213070435673012666 00000000000000PNG  IHDR szzsRGB pHYs B(xIDATXŗ}P_ I$$<Qaj2-)hxEѻ]yn;]> W:E!qA%G*S ~??!u KZ]B܆Dv[_;(i7}|L+Vf퇙Ȋf"ͣ橀kC,`K^<~1RH.O+|=[M"AЧB(Skt\~r ph]|G3(+-F1MUS'ܾE&1 cb1''mz :ű:j: s# s_-=11J%O#qF3R$.%u#3O"A/QPP&Ħ-Dߢb}"ϗ$k#F֐Hzv xɲ#kw- &X*9.S?ڂ狩~Ac'Jp~m-Yi$an7jVhyFHSTN/76VΩ"fJypx0EfQǻH}}unK'oR *:#{WpX:F3nwN5wA@IIxLMۺ; w~DeYJm gEdƱ1Vꗢjѫeūw}0BK_Xh?JF c5V mixfr܍y#+1T2X7q+7x~(DԐ 缓Sry`bjƐAI(skpTs ukU,Z6q7gD,e7qc s <5-W: (6TOf@[c .L7\'mM!^Aye$L-&i@B6ꅙf#ւ_$@"D^ۂ&WIRxVw?CFvnopmn 9;޹ qTQI׬ O<_34Jvn?kƯ ӗ.']1 xs-@I gsV̬w:7.px>#>>%>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%>->->->->\,\Fq>>#>>%>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%>->->->->\,\Fq>>#>>%>>>>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>%>->->->->\,\Fq22#22$2'ZZ̀222222̀222̀22222 222̀̀ 22222̀22Ϳ22Ҁ222 22̀22̀22222 2222222222̀22222̀22̀222 2 222222222%---00 Vordergrun     #000D00TE+$r r r r   r s r 4sr4s r44s rs4srs4usrs4suuss4suusss4ssuu4sss4usuu4ss4usuu4ss4uusuu4susuu4susuu4susssuu4susssu4usssu4uss44uss4uss4uss4ssusu ssu suuuuuuuu"u%u(*EE+$  ) )  )) ү  ee ee eePePPePPePPeePPPeePPPeePPPPePPPePPPeP}PPeP}PeP}}PeP}}eeP}eP}eP}e}}P}}P}} P}} P} P}P}P}P}P}P}P}"P}%P}(*EE4+4$444 4 4)n4 )n 4> )nn4>)n4 > n> > >>  {{{{{{{{{{{{{{{{{{{{{{{{{{{{ {{ {Ϥ { { { { { { { {{{{{{{"{%{(*EE+& ! # &'''''&''''''''''''''''% "  # &(,gnubik-2.4.3/icons/automake.mk0000644000175000017460000000270413070435673013212 00000000000000themedir = $(DESTDIR)$(datadir)/icons/hicolor context = apps sizes = 16 22 24 32 48 install-icons: for size in $(sizes); do \ $(MKDIR_P) $(themedir)/$${size}x$${size}/$(context) ; \ $(INSTALL_DATA) $(top_srcdir)/icons/logo$$size.png $(themedir)/$${size}x$${size}/$(context)/gnubik.png ; \ done if test -z $(DESTDIR) ; then \ gtk-update-icon-cache --ignore-theme-index $(themedir) ; \ fi uninstall-icons: for size in $(sizes); do \ $(RM) $(themedir)/$${size}x$${size}/$(context)/gnubik.png ; \ done gtk-update-icon-cache --ignore-theme-index $(themedir) desktopdir=$(DESTDIR)$(datadir)/applications install-desktop: $(MKDIR_P) $(desktopdir) chmod u+w $(desktopdir) $(INSTALL_DATA) $(top_builddir)/icons/gnubik.desktop $(desktopdir)/gnubik.desktop uninstall-desktop: $(RM) $(desktopdir)/gnubik.desktop INSTALL_DATA_HOOKS = install-icons install-desktop UNINSTALL_DATA_HOOKS = uninstall-icons uninstall-desktop install-data-hook: $(INSTALL_DATA_HOOKS) uninstall-hook: $(UNINSTALL_DATA_HOOKS) EXTRA_DIST += icons/logo22.xcf icons/logo32.xcf icons/logo48.xcf EXTRA_DIST += icons/logo16.png icons/logo22.png icons/logo32.png icons/logo48.png EXTRA_DIST += icons/gen-dot-desktop.scm icons/gnubik.desktop: icons/gen-dot-desktop.scm $(POFILES) $(MKDIR_P) `dirname $@` $(GUILE) $< `echo $(POFILES) | $(SED) -e 's%po/%'$(srcdir)'/po/%g'` > $@,tmp mv $@,tmp $@ ALL_LOCAL += icons/gnubik.desktop CLEANFILES += icons/gnubik.desktop gnubik-2.4.3/icons/logo32.xcf0000644000175000017460000001262113070435673012661 00000000000000gimp xcf file BB,$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches)  Outline     &7 K [ 2U22̀2̀22 2 222222̀22   2 2222222 grid     )y  +>>>>> >>>>>>>>>>> >>>>>>> >>> >>>>>>>> >>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>> >>> >>>>>> >>>>>>> >>>>> >>>>>> >>>>>>>>>>>>>>>>-+>>>>> >>>>>>>>>>> >>>>>>> >>> >>>>>>>> >>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>> >>> >>>>>> >>>>>>> >>>>> >>>>>> >>>>>>>>>>>>>>>>-+>>>>> >>>>>>>>>>> >>>>>>> >>> >>>>>>>> >>> >>>>>>>>>>>>>>>>>> >>>>>>>>>>> >>> >>>>>> >>>>>>> >>>>> >>>>>> >>>>>>>>>>>>>>>>-J22Ϳ2׿ 222222222̀2 2222222  2222 22 22 22   -  Vordergrun     #  rrzrrrr׫ݠpsΑrrŇ44ssשrrI44ss훀rrss^44̦sussss^44ssulsss^44Jssu_Bsss^4B_utssu_44^seguutssu_44suutsstuu_44遜uutsstu_44uutstqF44uus44usӰi4Œssusuu uuuuӌuuuuuM şӵbb))xe))CȰƯVYk˹{ؼT)ʻТee"Ƿtee"ԱҮee"ZPmee"/Pee^NPW}e`WPPWeeUPPPWeeQvӨPP{^PPWee"ԨPPҿҵPWee"/PP}}ree"PP$S}}Ծee"P>S}}׾e"5S}}_SS}}}P,}SS}}}PPG5}}S2 }PP}S}PP}SrPP}SP}P}P}M 44[44v4NV4h~~))ϯnn4Ha2))NƎnn #46:>>0djИnnbI4>>^I 1>>nĤ7 #s}v7)E7 {`7.?E7{2&E7{E{8{EA{{8{7 .{{8Yp{{7){{8,N{7){{8Cw7){{7 TŤ7){`) TŲ7R Tw  T{D   T{{mR   {{ {{ ϐ{{ {{{M Uq99UU9q 9Uq9UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU9U 9  Uq9qqULgnubik-2.4.3/icons/gen-dot-desktop.scm0000644000175000017460000000307113070435673014561 00000000000000;; -*-scheme-*- (use-modules (ice-9 popen)) (use-modules (ice-9 rdelim)) (define (N_ x) x) (define generic-name (N_ "GNUbik")) (define comment (N_ "A 3D magic cube puzzle")) (define (thing p) (let ((str (read-line p))) (if (not (eof-object? str)) (if (and (> (string-length str) 9) (string-contains str "msgstr \"" 0 9)) (string-drop-right (string-drop str 8) 1) (thing p)) #f))) (define locs (cdr (program-arguments))) (define (grep-generic-name what file) (let ((p (open-input-pipe (format #f "msggrep -K -e '^~A$' '~A' 2> /dev/null | msgattrib --translated --no-fuzzy" what file))) ) (let ((x (thing p))) (close p) x))) ;; Convert po/de.po to de (define (filename->isocode f) (string-drop-right (string-drop f (1+ (string-rindex f #\/))) 3)) (define (N_ x) x) (display "# Generated file. Do not edit. -*- buffer-read-only: t -*-\n\n") (display "[Desktop Entry]\n") (display "Name=Gnubik\n") (format #t "GenericName=~A\n" (N_ generic-name)) (format #t "Comment=~A\n" (N_ "A 3D magic cube puzzle")) (map (lambda (loc) (let ((str (grep-generic-name generic-name (format #f "~A" loc)))) (if str (display (format #f "GenericName[~A]=~A\n" (filename->isocode loc) str))))) locs) (map (lambda (loc) (let ((str (grep-generic-name comment (format #f "~A" loc)))) (if str (display (format #f "Comment[~A]=~A\n" (filename->isocode loc) str))))) locs) (display "Exec=gnubik %F\n") (display "Icon=gnubik\n") (display "Terminal=false\n") (display "Type=Application\n") (display "Categories=Game;Amusement;GTK;\n") gnubik-2.4.3/icons/logo22.xcf0000644000175000017460000000475113070435673012665 00000000000000gimp xcf fileBB,$gimp-image-grid(style intersections) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 32.000000) (yspacing 32.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) NOutline     &3GW 2 2̀222 72 "222 2̀ 222͘2 Vordergrun     #!vrsr{ep垁egrg+lu`onrtf24)uptjnsri04!ppuvxE{ksrj)>uppu|01Fsr]uvsppu{05)enuuqpprtu*4)ounr+)lqr&َrsrwrrrṵruwusuwuotutw t~|Ԋu|%>)ڿR!=ųƫh˳Tmɝ`elPxڛ_dnPQJbaFPNe_IOGPNNffl\IOFҏPbdlӿIOM}}Ҝ_lkLS}}k hԴ.}}Shb}PTCh{j|PSOf}}j.~}PSPf||h GOPf||OSf||| O|35433o42C='AӘmL)8285@)* :Xplx4@>?;J~99Iǚ'<zU+ zyzw+  zvh  -y  z|v  z  Izz U|zf*z|zFz|zF uzzFz|E z4ث<m e .Ignubik-2.4.3/icons/logo48.png0000644000175000017460000000427313070435673012700 00000000000000PNG  IHDR00WsRGB pHYs B(x`IDATh}P_$  @$NSlZwֳnjUmvލ0ժtws`wn]AOQ4D~ D16#yJ;}O-\uL >D ZbI/n&' 4i2Z:cVZ6Y,~Έw91_F([wt:?'@ceb]Zt33IAEeM@NNpFT 1-HE2U 2U e8͔)\%xÙjd}VX ؈a8;[6ck6ZuVooYC6Qbf9vö\j3TY)RlJx);K,DIѨI׀VjbϮQ 'xr@gYJPK&,0hvv\FIΞI>[_3 ::Uis+Pk:ŏ&#YlI3qɯ 2, H|f{шq+XJYrkvިF?o<#0k^H00/wT+Sm3zK%,^ s-= :ެ$:li{ os'7.VQ5KKKL@k0]>D h_fM޸pCGc]ưb "liLqMRpV,)Wq%DiAa(x4i(p`Y{͍I1UǀEB^̤ ?$' (P:ʹSLYq,[[+R;45fZx^1;X#WA!(*`kv$mوL=P6p U5HrQoQAUuw䟱VmgVn:uDΆI ,Atb2#h uٱ`i's,0~,maݡGEFo} m`u9X:OB01%zo.apm?4Un5gr9<u{;Q@-;Ӆ/&ej\AIr/O5X $@ echo directory: gnubik >> $@ echo filename: $< >> $@ $(PACKAGE)-$(VERSION).tar.gz.directive.asc: $(PACKAGE)-$(VERSION).tar.gz.directive gpg --clearsign $< $(PACKAGE)-$(VERSION).tar.gz.sig: $(PACKAGE)-$(VERSION).tar.gz gpg -b $< .PHONY: release release: distcheck $(PACKAGE)-$(VERSION).tar.gz.directive.asc $(PACKAGE)-$(VERSION).tar.gz.sig gnubik-2.4.3/build-aux/0000755000175000017460000000000013070437266011707 500000000000000gnubik-2.4.3/build-aux/compile0000555000175000017460000001624413070436203013200 00000000000000#!/bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program 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, 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnubik-2.4.3/build-aux/config.guess0000555000175000017460000012367113070436203014145 00000000000000#!/bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-11-04' # 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 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . 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 1992-2014 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 ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # 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 "$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 ; set_cc_for_build= ;' # 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 case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # 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 tuples: *-*-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 ;; sh5el) machine=sh5le-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 -q __ELF__ 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 ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; 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'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; 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 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; 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 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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 ;; 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 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; 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 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # 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 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; 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 && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; 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 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????: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 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; 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 ;; *: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 if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi 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 ;; *:AIX:*:[4567]) 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/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 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 eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 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 && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; 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 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; 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 ;; 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 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; 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 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *: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/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; 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 -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #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-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; 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-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; 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 ;; 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 ;; 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 ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; 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 ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. 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 ;; 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 ;; 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 i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; 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 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 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 | S7501*:*: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; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' 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; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *: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 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; 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 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *: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 ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *: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 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac 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: gnubik-2.4.3/build-aux/config.rpath0000755000175000017460000004401213070435673014140 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2010 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore gnubik-2.4.3/build-aux/install-sh0000555000175000017460000003452313070436203013626 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnubik-2.4.3/build-aux/config.sub0000555000175000017460000010622213070436203013601 00000000000000#!/bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-12-03' # 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 3 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, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # 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. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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 1992-2014 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 ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # 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 ;; * ) 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-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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 | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -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 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -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/'` ;; -sco5v6*) # 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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -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 \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # 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-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # 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 ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; 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 ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; 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 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; 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*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 ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; 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 ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; 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 ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; 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 ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) 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 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; 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 ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; 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 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; 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 ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-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 ;; mmix) basic_machine=mmix-knuth ;; 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 ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) 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. -auroraux) os=-auroraux ;; -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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -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* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -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* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # 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* | -haiku* \ | -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 ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -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 score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) 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 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; 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 ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-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 ;; -cnk*|-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 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnubik-2.4.3/build-aux/missing0000555000175000017460000001532713070436203013222 00000000000000#!/bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program 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, 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, see . # 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. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnubik-2.4.3/build-aux/depcomp0000555000175000017460000005601513070436203013177 00000000000000#!/bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program 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, 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, see . # 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 Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnubik-2.4.3/ABOUT-NLS0000644000175000017460000027215513070435673011200 000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. 1.1 Quick configuration advice ============================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias, message inheritance, automatic charset conversion or plural form handling) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. 1.2 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. If not, the included GNU `gettext' library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls will, respectively, bypass any pre-existing `gettext' to use the internationalizing routines provided within this package, or else, _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might not be desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. The configuration process will not test for the `catgets' function and therefore it will not be used. The reason is that even an emulation of `gettext' on top of `catgets' could not provide all the extensions of the GNU `gettext' library. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.3 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.4 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.5 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of May 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am ar as ast az be be@latin bg bn_IN bs ca crh +---------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] [] | iso_639_3 | [] | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ af am ar as ast az be be@latin bg bn_IN bs ca crh 6 0 2 3 19 1 11 3 28 3 1 38 5 cs da de el en en_GB en_ZA eo es et eu fa fi +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] [] [] | bfd | [] [] | bibshelf | [] [] [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] | bombono-dvd | [] [] | buzztard | [] [] [] | cflow | [] [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | [] | cppi | [] | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] [] | flex | [] [] [] | freedink | [] [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] [] | gjay | [] [] | gliv | [] [] [] [] | glunarclock | [] [] [] | gnubiff | () | gnucash | [] () () () () () | gnuedu | [] [] | gnulib | [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] [] [] | gpe-beam | [] [] [] [] [] | gpe-bluetooth | [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] [] | gpe-sketchbook | [] [] [] [] [] | gpe-su | [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] | gpe-todo | [] [] [] [] | gphoto2 | [] [] () [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] | gsasl | [] [] | gss | [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] [] | gstreamer | [] [] [] [] [] [] | gtick | [] () [] [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] [] [] | help2man | [] [] | hylafax | [] [] | idutils | [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] [] | iso_3166 | [] [] [] () [] [] [] () [] | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] [] | iso_639 | [] [] [] () [] [] [] | iso_639_3 | | jwhois | [] [] | kbd | [] [] [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] | klavaro | [] [] [] [] | latrine | [] () [] | ld | [] [] [] | leafpad | [] [] [] [] [] [] [] | libc | [] [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] [] | linkdr | [] [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] [] | mkisofs | [] | myserver | | nano | [] [] [] [] | opcodes | [] [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] [] | psmisc | [] [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] [] | rosegarden | () () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] [] | tar | [] [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] [] | wget | [] [] [] [] | wyslij-po | [] | xchat | [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ cs da de el en en_GB en_ZA eo es et eu fa fi 64 105 117 18 1 8 0 28 89 18 19 0 104 fr ga gl gu he hi hr hu hy id is it ja ka kn +------------------------------------------------+ a2ps | [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] | bash | [] [] [] | bfd | [] [] | bibshelf | [] [] [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] | bombono-dvd | | buzztard | [] | cflow | [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] [] | cryptsetup | [] [] [] | dfarc | [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] | freedink | [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | () | glunarclock | [] [] [] | gnubiff | () [] () | gnucash | () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] | gpe-beam | [] [] [] | gpe-bluetooth | [] [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] | gpe-su | [] [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] [] [] | gpe-todo | [] [] | gphoto2 | [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] [] | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | [] [] [] [] | gtick | [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] | help2man | [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | () [] [] | iso_3166 | () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | () [] [] [] [] | iso_639 | () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] | keytouch-editor | [] [] [] [] | keytouch-keyboa... | [] [] [] [] | klavaro | [] [] | latrine | [] [] | ld | [] [] [] | leafpad | [] [] [] [] [] [] () | libc | [] [] [] [] | libexif | | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] | linkdr | [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] [] | opcodes | [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] | psmisc | [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] | rosegarden | () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] | sed | [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] | tar | [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] | xchat | [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] | +------------------------------------------------+ fr ga gl gu he hi hr hu hy id is it ja ka kn 121 53 20 4 8 2 5 53 2 120 5 83 66 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 12 48 4 2 2 4 24 10 19 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 61 47 91 3 55 47 8 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] | 11 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 13 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 30 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () () | 9 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 22 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] [] | 25 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 6 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 13 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] | 16 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] | 60 xkeyboard-config | [] [] [] [] | 25 +---------------------------------------------------+ 84 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 2 0 10 66 50 155 17 97 7 41 2610 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If May 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.6 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. gnubik-2.4.3/README0000644000175000017460000000036613070435673010622 00000000000000This is the GNUbik distribution. GNUbik is a GNU package. It is a 3D interactive graphics puzzle. It renders an image of a magic cube (similar to a rubik cube) and you attempt to solve it. See the file INSTALL for installation instructions. gnubik-2.4.3/scripts/0000755000175000017460000000000013070437266011504 500000000000000gnubik-2.4.3/scripts/automake.mk0000644000175000017460000000151613070435673013566 00000000000000# Copyright (c) 2004 Dale Mellor # # This program 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 3 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, see . scriptdir = ${pkgdatadir}/scripts initdir = ${pkgdatadir}/guile dist_script_DATA = \ scripts/debug.scm \ scripts/rand.scm \ scripts/flubrd.scm \ scripts/mellor-solve.scm gnubik-2.4.3/scripts/flubrd.scm0000644000175000017460000002535213070435673013415 00000000000000;; Copyright (c) 2004 Dale Mellor ;; ;; This program 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 3 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, see . ;; For internationalisation (define _ gettext) ;; Direct access to a cube object. It is assumed the user knows what he is doing ;; (read the manual!) :-) (define (get-colour cube face index) (vector-ref (vector-ref (cdr cube) face) index)) (define (set-colour! cube face index colour) (vector-set! (vector-ref (cdr cube) face) index colour)) ;; All the rest of this file assumes a certain structure to a cube object. This ;; test makes sure that structure is in place. The cube structure passed from ;; the C world starts with a list of structure version, number of dimensions, ;; and the size of the cube in each dimension. ;; ;; This function is not applied implicitly for efficiency's sake, but should be ;; exported from the module (when it becomes one) so that the user can check the ;; applicability of the module). (define (check-cube-structure cube) (if (equal? (car cube) '(1 3 3 3 3)) #t (begin (gnubik-error-dialog (_ "This script only works on 3×3×3 cubes.")) #f))) ;; This a-list defines the relationships and orientations of the faces, as ;; passed from the C world into the scheme cube object. The key is the number of ;; the face, and then the values are the letter used to symbolically identify ;; the face, the face which runs along the 'top' edge of this face (the row ;; holding the 0, 1 and 2 cells), and the face which runs along the 'right' edge ;; of this face (the column with the 2, 5 and 8 cells). ;; ;; These correspondences have been determined by trial and error. There is also ;; an implicit assumption made that faces 0 and 1, 2 and 3, and faces 4 and 5 ;; are opposites. (define faces '((4 . (#\f 0 3)) (5 . (#\b 0 3)) (2 . (#\l 0 5)) (3 . (#\r 0 5)) (0 . (#\u 2 5)) (1 . (#\d 2 5)))) ;; Return the number of the face opposite the one given. (define (opposite-face face) (+ (* 2 (quotient face 2)) (- 1 (modulo face 2)))) ;; Alist with fbdurl strings to identify elements as the key, and a cons cell of ;; face and index as the value. (define symbolic-mapping '()) ;; A convenience to help construct the above alist. (define (add-map symbol face index) (set! symbolic-mapping (cons (cons symbol (cons face index)) symbolic-mapping))) ;; For every face, make a mapping for each cell. (for-each (lambda (face) ;; The centre cell. (add-map (string (cadr face)) (car face) 4) ;; The edge cells. (let ((add-map (lambda (direction opposite index) (add-map (string (cadr face) (cadr (assv ((if opposite opposite-face (lambda (x) x)) ((if direction cadddr caddr) face)) faces))) (car face) index)))) (add-map #f #f 1) (add-map #t #f 5) (add-map #f #t 7) (add-map #t #t 3)) ;; The corner cells. (let* ((o (lambda (x) (if x opposite-face (lambda (x) x)))) (add-map (lambda (opp1 opp2 index) (add-map (string (cadr face) (cadr (assv ((o opp1) (caddr face)) faces)) (cadr (assv ((o opp2) (cadddr face)) faces))) (car face) index)))) (add-map #f #f 2) (add-map #t #f 8) (add-map #f #t 0) (add-map #t #t 6)) ;; The corner cells again (second and third components of the symbol ;; reversed). (let* ((o (lambda (x) (if x opposite-face (lambda (x) x)))) (add-map (lambda (opp1 opp2 index) (add-map (string (cadr face) (cadr (assv ((o opp2) (cadddr face)) faces)) (cadr (assv ((o opp1) (caddr face)) faces))) (car face) index)))) (add-map #f #f 2) (add-map #t #f 8) (add-map #f #t 0) (add-map #t #t 6))) ;; The last clause of (for-each proc face). faces) ;; This is what it's all about. These are the two main functions which should be ;; exported from this module (when we make it a module). (define (get-colour-symbolic cube symbol) (let ((symbol-entry (assoc symbol symbolic-mapping))) (get-colour cube (cadr symbol-entry) (cddr symbol-entry)))) (define (set-colour-symbolic! cube symbol colour) (let ((symbol-entry (assoc symbol symbolic-mapping))) (set-colour! cube (cadr symbol-entry) (cddr symbol-entry) colour))) ;;---------------------------------------------------------------------- ;; ;; The second part of this file defines the functions needed to move the cube ;; about. ;; ;;---------------------------------------------------------------------- ;; Create a procedure which rotates the letters of a string according to the ;; specification passed: l is a list of pairs of letters with the notion that ;; occurrences of the first should be replaced with the second, in the strings ;; that the returned procedure processes. (define (define-face-twister sub-list) (lambda (s) (let ((s (string-copy s)) (chars (string-length s))) (do ((i 0 (+ i 1))) ((eq? i chars) s) (let ((replacement (assoc-ref sub-list (string-ref s i)))) (if replacement (string-set! s i replacement))))))) ;; In its natural state, this procedure manipulates the given scheme cube object ;; to reflect an anticlockwise rotation of the front face. However, the supplied ;; face-twister function may conspire to fiddle the face letters whenever the ;; cube is accessed so that, in face, any face may be the one being rotated. (define (twist-front cube face-twister) (for-each (lambda (twists) (let ((first (get-colour-symbolic cube (face-twister (car twists))))) (let loop ((twists twists)) (if (null? (cdr twists)) (set-colour-symbolic! cube (face-twister (car twists)) first) (begin (set-colour-symbolic! cube (face-twister (car twists)) (get-colour-symbolic cube (face-twister (cadr twists)))) (loop (cdr twists))))))) '(("ufr" "rfd" "dfl" "lfu") ("uf" "rf" "df" "lf") ("ufl" "rfu" "dfr" "lfd") ("ful" "fur" "frd" "fld") ("fu" "fr" "fd" "fl")))) ;; Wrapper around the procedure above which works out a face-twister function ;; given the face the user wants rotating, and works out how many turns are ;; required given the user's notion of clockwise quarters. (define (twist-face cube face quarters) (let ((face-twister (define-face-twister (case (string-ref face 0) ((#\f) '()) ((#\b) '((#\b . #\f) (#\f . #\b) (#\l . #\r) (#\r . #\l))) ((#\u) '((#\u . #\b) (#\b . #\d) (#\d . #\f) (#\f . #\u))) ((#\d) '((#\d . #\b) (#\b . #\u) (#\u . #\f) (#\f . #\d))) ((#\l) '((#\l . #\b) (#\b . #\r) (#\r . #\f) (#\f . #\l))) ((#\r) '((#\r . #\b) (#\b . #\l) (#\l . #\f) (#\f . #\r))))))) (do ((i (case quarters ((1) 3) ((2) 2) ((3) 1) ((-1) 1)) (- i 1))) ((eq? i 0)) (twist-front cube face-twister)))) ;; Implementation of the move buffer object. This list stores the moves ;; generated by the move-face procedure for eventual submission to the ;; gnubik-rotate-* procedures. (define move-buffer '()) (define (execute-move-buffer!) (gnubik-append-moves (reverse! move-buffer)) (set! move-buffer '())) (define (clear-move-buffer!) (set! move-buffer '())) ;; A procedure which applies the above function for specific symbolic move ;; names. It also returns an entry that should be passed in a list to ;; gnubik-append-moves et al., to cause the cube to be rotated in the C world ;; also (the correspondence between the scheme moves and those in the C world ;; have been determined by trial and error). ;; ;; This is the third main function which should be exported from this module ;; (when it becomes one). (define (move-face cube symbol) (let ((data (assoc symbol '(("f" . (1 (0 -2 0))) ("b" . (1 (0 2 1))) ("l" . (1 (1 -2 0))) ("r" . (1 (1 2 1))) ("u" . (1 (2 -2 0))) ("d" . (1 (2 2 1))) ("f+" . (1 (0 -2 0))) ("b+" . (1 (0 2 1))) ("l+" . (1 (1 -2 0))) ("r+" . (1 (1 2 1))) ("u+" . (1 (2 -2 0))) ("d+" . (1 (2 2 1))) ("f " . (1 (0 -2 0))) ("b " . (1 (0 2 1))) ("l " . (1 (1 -2 0))) ("r " . (1 (1 2 1))) ("u " . (1 (2 -2 0))) ("d " . (1 (2 2 1))) ("f-" . (3 (0 -2 1))) ("b-" . (3 (0 2 0))) ("l-" . (3 (1 -2 1))) ("r-" . (3 (1 2 0))) ("u-" . (3 (2 -2 1))) ("d-" . (3 (2 2 0))))))) (twist-face cube symbol (cadr data)) (set! move-buffer (cons (caddr data) move-buffer)))) gnubik-2.4.3/scripts/mellor-solve.scm0000644000175000017460000004155513070435673014562 00000000000000;; Copyright (c) 2004 Dale Mellor ;; ;; This program 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 3 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, see . ;; I'm not normally one for global variables, but this is so pervasive ;; throughout this unit I couldn't resist. It is the scheme reflection of ;; GNUbik's own cube object. (define cube '()) ;; Whenever we access the cube, or perform moves on it, we call a function which ;; performs symbolic rotations about the sides l, r, b and f. This way, we only ;; have to work out one quarter of the total moves to solve the cube, and the ;; rest come by symmetry. The following variable gets a function which performs ;; the rotations (it will be a function which takes a string in and gives a ;; transformed string back). (define rotated-flubrd-symbol '()) ;; Function to create the procedure that gets assigned to the variable binding ;; above, given the number of turns required. For example, if one turn is ;; requested, then any algorithms which are centred around the front face will, ;; unwittingly, be applying themselves to the right face. (define (rotated-flubrd-symbol-set! turns) (set! rotated-flubrd-symbol (lambda (s) (do ((s (string-copy s)) (j 0 (+ 1 j))) ((eq? j turns) s) (do ((i 0 (+ i 1))) ((eq? i (string-length s)) s) (string-set! s i (case (string-ref s i) ((#\l) #\f) ((#\f) #\r) ((#\r) #\b) ((#\b) #\l) (else (string-ref s i))))))))) ;; So, if proc is designed to solve a block on the front face, we apply it to ;; four different rotations of the symbolic letters and have it solve a block on ;; four faces. (define (repeat-for-all-rotations proc) (do ((i 0 (+ i 1))) ((eq? i 4)) (rotated-flubrd-symbol-set! i) (proc))) ;; Wrapper around get-colour-symbolic which applies the cube rotation first, ;; i.e. it is influenced by the script later setting rotated-flubrd-symbol by ;; calling rotated-flubrd-symbol-set! (define (lookup-colour s) (get-colour-symbolic cube (rotated-flubrd-symbol s))) ;; Wrapper around move-face which applies the cube rotation first. Note that ;; this takes a string consisting of multiple moves, each one represented by two ;; letters, e.g. "f+"; the single-letter symbols which move-face accepts cannot ;; be used here. (define (do-moves moves) (do ((moves moves (substring moves 2))) ((string-null? moves)) (move-face cube (rotated-flubrd-symbol (substring moves 0 2))))) ;; This introduces xsubstring, which allows us to perform cyclic rotations on ;; the characters of a string. (use-modules ((srfi srfi-13))) ;; Think about fixing the uf block, but then apply the algorithms with the cube ;; symbolically rotated four times. Look for the required block in all possible ;; locations, and when it is found lookup the moves that are needed to bring it ;; to uf, without upsetting any of the other top edges. (define (mellor-top-edge-solve) (repeat-for-all-rotations (lambda () (let ((u (lookup-colour "u")) (f (lookup-colour "f"))) (let trial ((moves '(("fu" . "f-u+l-u-") ("ur" . "r-u-r+u+") ("ru" . "r-f-") ("bu" . "b-u-r-u+") ("ub" . "b-u-u-b+u-u-") ("ul" . "l+u+l-u-") ("lu" . "l+f+") ("fr" . "u-r+u+") ("rf" . "f-") ("rb" . "r+r+f-r-r-") ("br" . "u-r-u+") ("lb" . "l+l+f+l-l-") ("bl" . "u+l+u-") ("fl" . "u+l-u-") ("lf" . "f+") ("fd" . "d+r+f-r-") ("df" . "f+f+") ("rd" . "r+f-r-") ("dr" . "d-f+f+") ("db" . "d+d+f+f+") ("bd" . "d-r+f-r-") ("dl" . "d+f+f+") ("ld" . "l-f+l+")))) (if (not (null? moves)) (if (and (eq? u (lookup-colour (caar moves))) (eq? f (lookup-colour (xsubstring (caar moves) 1 3)))) (do-moves (cdar moves)) (trial (cdr moves))))))))) ;; Concentrate on getting the block ufr correct, but then apply the procedure to ;; all four sides of the cube. Look for the correct block in all locations, and ;; then lookup the moves required to get it to ufr. (define (mellor-top-corner-solve) (repeat-for-all-rotations (lambda () (let ((top-colour (lookup-colour "u")) (front-colour (lookup-colour "f")) (right-colour (lookup-colour "r"))) (let loop ((moves '(("rfd" . "r-d-r+") ("fld" . "d+r-d-r+") ("lbd" . "f+d-d-f-") ("brd" . "f+d-f-") ("fdr" . "f+d+f-") ("rdb" . "d-f+d+f-") ("bdl" . "r-d-d-r+") ("ldf" . "r-d+r+") ("drf" . "r-d+r+f+d-d-f-") ("dfl" . "d+r-d+r+f+d-d-f-") ("dlb" . "d-d-r-d+r+f+d-d-f-") ("dbr" . "d-r-d+r+f+d-d-f-") ("fru" . "f+d-d-f-r-d-d-r+") ("ruf" . "r-d-d-r+f+d-d-f-") ("urb" . "b-d-d-b+r-d+r+") ("rbu" . "r+d+r-r-d-d-r+") ("bur" . "f+b-d-f-b+") ("ubl" . "b+d-b-r-d-d-r+") ("blu" . "b+r-d-d-r+b-") ("lub" . "l-f+d-d-f-l+") ("ulf" . "l+d-l-r-d+r+") ("lfu" . "l+r-d+r+l-") ("ful" . "f-d-f+f+d-d-f-")))) (if (not (null? moves)) (if (and (eq? (lookup-colour (caar moves)) top-colour) (eq? (lookup-colour (xsubstring (caar moves) 1 4)) front-colour) (eq? (lookup-colour (xsubstring (caar moves) 2 5)) right-colour)) (do-moves (cdar moves)) (loop (cdr moves))))))))) ;; Consider the fr block. If the block is to be found in the bottom slice, get ;; it into one of two `starting positions' (either fd or rd) and then move it up ;; into fr by looping back. If the piece is not found here, it must be in one of ;; the other middle edge positions; for now we just check if we are holding a ;; middle edge block at fr and if so we drop it to the bottom slice, so that a ;; repeat of the algorithm will eventually put it in its correct place, and by ;; the time the repeat comes around our own block will hopefully have been ;; dropped down. (define (mellor-middle-slice-solve) (do ((i 0 (+ 1 i))) ((eq? i 3)) (repeat-for-all-rotations (lambda () (let ((front-colour (lookup-colour "f")) (right-colour (lookup-colour "r"))) (let loop () (cond ((and (eq? (lookup-colour "fd") front-colour) (eq? (lookup-colour "df") right-colour)) (do-moves "d-r-d+r+d+f+d-f-")) ((and (eq? (lookup-colour "df") front-colour) (eq? (lookup-colour "fd") right-colour)) (do-moves "d+") (loop)) ((and (eq? (lookup-colour "rd") right-colour) (eq? (lookup-colour "dr") front-colour)) (do-moves "d+f+d-f-d-r-d+r+")) ((and (eq? (lookup-colour "dr") right-colour) (eq? (lookup-colour "rd") front-colour)) (do-moves "d-") (loop)) ((and (eq? (lookup-colour "ld") front-colour) (eq? (lookup-colour "dl") right-colour)) (do-moves "d+") (loop)) ((and (eq? (lookup-colour "dl") front-colour) (eq? (lookup-colour "ld") right-colour)) (do-moves "d+d+") (loop)) ((and (eq? (lookup-colour "bd") front-colour) (eq? (lookup-colour "db") right-colour)) (do-moves "d+d+") (loop)) ((and (eq? (lookup-colour "db") front-colour) (eq? (lookup-colour "bd") right-colour)) (do-moves "d-") (loop)) ((and (eq? (lookup-colour "fr") front-colour) (eq? (lookup-colour "rf") right-colour)) noop) ((let ((bottom-colour (lookup-colour "d"))) (and (not (eq? (lookup-colour "fr") bottom-colour)) (not (eq? (lookup-colour "rf") bottom-colour)))) (do-moves "d+f+d-f-d-r-d+r+") (loop))))))))) ;; Procedure which answers the question, `Is the fdr block located in the right ;; place (regardless of orientation)?' (define (placed-fdr?) (eq? (+ (ash 1 (lookup-colour "fdr")) (ash 1 (lookup-colour "dfr")) (ash 1 (lookup-colour "rdf"))) (+ (ash 1 (lookup-colour "f" )) (ash 1 (lookup-colour "d" )) (ash 1 (lookup-colour "r" ))))) ;; We look at all the bottom corners, and set a bit in a bit-mask when one is in ;; the right place. There are six patterns to look for: four in which two ;; adjacent blocks are out of place, and two in which diagonal blocks are out of ;; place. When we find one of these, we apply a symbolic rotation to the cube so ;; that the missing pieces are in set positions, and then apply appriopriate set ;; moves. Otherwise, either all the pieces are already in place, or else we just ;; shift the bottom slice around and loop until we find a pattern. (define (mellor-bottom-corner-place) (let ((fix-2 (lambda () (do-moves "r-d-r+f+d+f-r-d+r+d-d-"))) (fix-d (lambda () (do-moves "r-d-r+f+d-d-f-r-d+r+d-")))) (let loop () (case (do ((i 0 (+ i 1)) (a 0 a)) ((eq? i 4) a) (rotated-flubrd-symbol-set! i) (set! a (+ a (if (placed-fdr?) (ash 1 i) 0)))) ((3) (rotated-flubrd-symbol-set! 3) (fix-2)) ((6) (rotated-flubrd-symbol-set! 0) (fix-2)) ((12) (rotated-flubrd-symbol-set! 1) (fix-2)) ((9) (rotated-flubrd-symbol-set! 2) (fix-2)) ((5) (rotated-flubrd-symbol-set! 1) (fix-d)) ((10) (rotated-flubrd-symbol-set! 0) (fix-d)) ((15) noop) (else (do-moves "d+") (loop)))))) ;; Very similar methodology to the above; look for patterns of blocks with the ;; right orientation, and then apply set-piece moves (depending on whether three ;; or two pieces are out of position). In all cases, we loop until we have a ;; solution because sometimes it takes more than one effort to get things ;; correct (we could go for a more intelligent approach than this...) (define (mellor-bottom-corner-orient) (let ((base-colour (lookup-colour "d")) (fix-2 (lambda () (do-moves "f-f-r-d+r+f+d+f-u-f+d-f-r-d-r+u+f-f-"))) (fix-3 (lambda () (do-moves "r-d-r+d-r-d-d-r+d-d-")))) (let loop () (case (do ((i 0 (+ i 1)) (a 0 a)) ((eq? i 4) a) (rotated-flubrd-symbol-set! i) (set! a (+ a (if (eq? (lookup-colour "dfr") base-colour) (ash 1 i) 0)))) ((0) (rotated-flubrd-symbol-set! 0) (fix-3) (loop)) ((8) (rotated-flubrd-symbol-set! 0) (fix-3) (loop)) ((1) (rotated-flubrd-symbol-set! 1) (fix-3) (loop)) ((2) (rotated-flubrd-symbol-set! 2) (fix-3) (loop)) ((4) (rotated-flubrd-symbol-set! 3) (fix-3) (loop)) ((6) (rotated-flubrd-symbol-set! 0) (fix-2) (loop)) ((12) (rotated-flubrd-symbol-set! 1) (fix-2) (loop)) ((9) (rotated-flubrd-symbol-set! 2) (fix-2) (loop)) ((3) (rotated-flubrd-symbol-set! 3) (fix-2) (loop)) ((10 5) (fix-2) (loop)))))) ;; Almost the same again; look at the pattern of correctly placed bottom edges, ;; and apply set-piece moves to a logically rotated cube so that the pieces are ;; in a certain pattern which we can solve. Again, it might take several efforts ;; to get this right, so we loop until a solution is found (again we could do ;; better than this if we tried!) (define (mellor-bottom-edge-place) (let ((fix (lambda () (do-moves "r+l-f+r-l+d-d-r+l-f+r-l+")))) (let loop () (case (do ((i 0 (+ 1 i)) (a 0 a)) ((eq? i 4) a) (rotated-flubrd-symbol-set! i) (let ((side-colour (lookup-colour "f"))) (set! a (+ a (if (or (eq? (lookup-colour "fd") side-colour) (eq? (lookup-colour "df") side-colour)) (ash 1 i) 0))))) ((0) (fix) (loop)) ((1) (rotated-flubrd-symbol-set! 0) (fix) (loop)) ((2) (rotated-flubrd-symbol-set! 1) (fix) (loop)) ((4) (rotated-flubrd-symbol-set! 2) (fix) (loop)) ((8) (rotated-flubrd-symbol-set! 3) (fix) (loop)))))) ;; A similar approach again, but looking for patterns and applying moves to get ;; the bottom edges in the correct orientation. (define (mellor-bottom-edge-orient) (let ((base-colour (get-colour-symbolic cube "d")) (fix-adjacent (lambda () (do-moves "f-f-r-r-r-u-d+b-b-u-u-d-d-f-u-f+u-u-d-d-b+b+u+d-r+u+r-r-f-f-"))) (fix-opposite (lambda () (do-moves "r-r-l-l-r-u-d+b-b-u-u-d-d-f-u-u-f+u-u-d-d-b-b-u+d-r+u-u-r-r-l-l-")))) (let loop () (case (do ((i 0 (+ i 1)) (a 0 a)) ((eq? i 4) a) (rotated-flubrd-symbol-set! i) (set! a (+ a (if (eq? (lookup-colour "df") base-colour) (ash 1 i) 0)))) ((0) (fix-opposite) (loop)) ((3) (rotated-flubrd-symbol-set! 2) (fix-adjacent)) ((6) (rotated-flubrd-symbol-set! 3) (fix-adjacent)) ((12) (rotated-flubrd-symbol-set! 0) (fix-adjacent)) ((9) (rotated-flubrd-symbol-set! 1) (fix-adjacent)) ((5) (rotated-flubrd-symbol-set! 0) (fix-opposite)) ((10) (rotated-flubrd-symbol-set! 1) (fix-opposite)))))) ;; Apply all the various stages for fixing a cube in order, but allow the user ;; to specify when to stop. (define (mellor-solve stage) (set! cube (gnubik-cube-state)) (if (check-cube-structure cube) (do ((i 0 (+ i 1)) (stage-list (list mellor-top-edge-solve mellor-top-corner-solve mellor-middle-slice-solve mellor-bottom-corner-place mellor-bottom-corner-orient mellor-bottom-edge-place mellor-bottom-edge-orient) (cdr stage-list))) ((eq? i stage) (execute-move-buffer!)) ((car stage-list))))) ;; Provide plenty of menu entries to give the user some control over the solving ;; algorithm (he may want to perform part of the solution himself!) (define _ gettext) (define solvers (gnubik-create-menu (_ "_Solvers"))) (define m3 (gnubik-create-menu (_ "_3×3") solvers)) (define menu (gnubik-create-menu "_Mellor" m3)) (gnubik-register-script (_ "_Full cube") '(mellor-solve 7) menu) (gnubik-register-script (_ "Bottom _edge place") '(mellor-solve 6) menu) (gnubik-register-script (_ "Bottom _corner orient") '(mellor-solve 5) menu) (gnubik-register-script (_ "_Bottom corner place") '(mellor-solve 4) menu) (gnubik-register-script (_ "_Middle slice") '(mellor-solve 3) menu) (gnubik-register-script (_ "_Top slice") '(mellor-solve 2) menu) (gnubik-register-script (_ "_Top edges") '(mellor-solve 1) menu) gnubik-2.4.3/scripts/rand.scm0000644000175000017460000000410413070435673013053 00000000000000;; Copyright (c) 2004 Dale Mellor ;; ;; This program 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 3 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, see . (setlocale LC_ALL "") ;; Procedure which generates a list of lists of three random items, and sends it ;; to gnubik-append-moves. The three random components are the face number ;; (0, 1 or 2), the slice number (-(size-1), ..., size-3, size-1), and the ;; direction to turn the slice (0 or 1). (define (gnubik-randomize num) (let ((size (caddar (gnubik-cube-state)))) (gnubik-append-moves (let loop ((num num) (ret '())) (if (eq? num 0) ret (loop (- num 1) (cons (list (random 3) (- (* 2 (random size)) (- size 1)) (random 2)) ret))))))) (define _ gettext) (define rand-menu (gnubik-create-menu (_ "_Randomize"))) (gnubik-register-script (format #f (_ "_~a") 8) '(gnubik-randomize 8) rand-menu) (gnubik-register-script (format #f (_ "_~a") 7) '(gnubik-randomize 7) rand-menu) (gnubik-register-script (format #f (_ "_~a") 6) '(gnubik-randomize 6) rand-menu) (gnubik-register-script (format #f (_ "_~a") 5) '(gnubik-randomize 5) rand-menu) (gnubik-register-script (format #f (_ "_~a") 4) '(gnubik-randomize 4) rand-menu) (gnubik-register-script (format #f (_ "_~a") 3) '(gnubik-randomize 3) rand-menu) (gnubik-register-script (format #f (_ "_~a") 2) '(gnubik-randomize 2) rand-menu) (gnubik-register-script (format #f (_ "_~a") 1) '(gnubik-randomize 1) rand-menu) gnubik-2.4.3/scripts/debug.scm0000644000175000017460000000356613070435673013230 00000000000000;; Copyright (c) 2004 Dale Mellor ;; ;; This program 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 3 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, see . (define (gnubik-dump-state) (let ((cube (gnubik-cube-state))) (display "Cube geometry (version dimensionality size-of-dim-1 ...): ") (newline)(display " ")(display (car cube)) (newline) (array-for-each (lambda (a) (array-for-each (lambda (b) (display b)(display " ")) a) (newline)) (cdr cube)) (newline))) (define (debug-move-animated face) (let ((cube (gnubik-cube-state))) (if (check-cube-structure cube) (begin (clear-move-buffer!) (move-face cube face) (execute-move-buffer!))))) (define _ gettext) (define dbg-menu (gnubik-create-menu (_ "_Debug"))) (define menu (gnubik-create-menu (_ "_Move") dbg-menu)) (gnubik-register-script (_ "_Dump state") '(gnubik-dump-state) dbg-menu) (gnubik-register-script "_F" '(debug-move-animated "f") menu) (gnubik-register-script "_B" '(debug-move-animated "b") menu) (gnubik-register-script "_L" '(debug-move-animated "l") menu) (gnubik-register-script "_R" '(debug-move-animated "r") menu) (gnubik-register-script "_U" '(debug-move-animated "u") menu) (gnubik-register-script "_D" '(debug-move-animated "d") menu)