gnubik-2.4/0000755000175000017500000000000011550033307007634 500000000000000gnubik-2.4/AUTHORS0000644000175000017500000000055011545563565010646 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/configure.ac0000644000175000017500000000560211550032516012046 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], [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 AX_CHECK_GL AX_CHECK_GLU if test "x$no_gl" = x"yes"; then AC_MSG_ERROR("No GL library seems to be installed") fi if test "x$no_glu" = x"yes"; then AC_MSG_ERROR("No GLU library seems to be installed") fi dnl Checks for libraries. PKG_CHECK_MODULES(GUILE, guile-2.0,, AC_SEARCH_LIBS([scm_c_string_length], [guile],, AC_MSG_ERROR("Guile 1.8.0 or later is required")) ) AC_SEARCH_LIBS([cos],[m],, AC_MSG_ERROR("No maths library present" )) PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.20.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 AX_CHECK_GLUT if test "x$no_glut" = x"yes"; then AC_MSG_ERROR("Debug features requested but no GLUT library seems to be installed") fi 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/scripts/0000755000175000017500000000000011550033307011323 500000000000000gnubik-2.4/scripts/mellor-solve.scm0000644000175000017500000004155511545563565014423 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/scripts/automake.mk0000644000175000017500000000151611545563565013427 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/scripts/debug.scm0000644000175000017500000000356611545563565013071 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) gnubik-2.4/scripts/flubrd.scm0000644000175000017500000002535211545563565013256 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/scripts/rand.scm0000644000175000017500000000362611545563565012724 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 . ;; 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 "_8" '(gnubik-randomize 8) rand-menu) (gnubik-register-script "_7" '(gnubik-randomize 7) rand-menu) (gnubik-register-script "_6" '(gnubik-randomize 6) rand-menu) (gnubik-register-script "_5" '(gnubik-randomize 5) rand-menu) (gnubik-register-script "_4" '(gnubik-randomize 4) rand-menu) (gnubik-register-script "_3" '(gnubik-randomize 3) rand-menu) (gnubik-register-script "_2" '(gnubik-randomize 2) rand-menu) (gnubik-register-script "_1" '(gnubik-randomize 1) rand-menu) gnubik-2.4/m4/0000755000175000017500000000000011550033307010154 500000000000000gnubik-2.4/m4/ax_check_glu.m40000644000175000017500000001253211550032722012755 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_check_glu.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_GLU # # DESCRIPTION # # Check for GLU. If GLU is found, the required preprocessor and linker # flags are included in the output variables "GLU_CFLAGS" and "GLU_LIBS", # respectively. If no GLU implementation is found, "no_glu" is set to # "yes". # # If the header "GL/glu.h" is found, "HAVE_GL_GLU_H" is defined. If the # header "OpenGL/glu.h" is found, HAVE_OPENGL_GLU_H is defined. These # preprocessor definitions may not be mutually exclusive. # # Some implementations (in particular, some versions of Mac OS X) are # known to treat the GLU tesselator callback function type as "GLvoid # (*)(...)" rather than the standard "GLvoid (*)()". If the former # condition is detected, this macro defines "HAVE_VARARGS_GLU_TESSCB". # # LICENSE # # Copyright (c) 2009 Braden McDaniel # # 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 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, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 8 AC_DEFUN([AX_CHECK_GLU], [AC_REQUIRE([AX_CHECK_GL])dnl AC_REQUIRE([AC_PROG_CXX])dnl GLU_CFLAGS="${GL_CFLAGS}" ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}" AC_CHECK_HEADERS([GL/glu.h OpenGL/glu.h]) CPPFLAGS="${ax_save_CPPFLAGS}" m4_define([AX_CHECK_GLU_PROGRAM], [AC_LANG_PROGRAM([[ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif]], [[gluBeginCurve(0)]])]) AC_CACHE_CHECK([for OpenGL Utility library], [ax_cv_check_glu_libglu], [ax_cv_check_glu_libglu="no" ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}" ax_save_LIBS="${LIBS}" # # First, check for the possibility that everything we need is already in # GL_LIBS. # LIBS="${GL_LIBS} ${ax_save_LIBS}" # # libGLU typically links with libstdc++ on POSIX platforms. # However, setting the language to C++ means that test program # source is named "conftest.cc"; and Microsoft cl doesn't know what # to do with such a file. # AC_LANG_PUSH([C++]) AS_IF([test X$ax_compiler_ms = Xyes], [AC_LANG_PUSH([C])]) AC_LINK_IFELSE( [AX_CHECK_GLU_PROGRAM], [ax_cv_check_glu_libglu=yes], [LIBS="" ax_check_libs="-lglu32 -lGLU" for ax_lib in ${ax_check_libs}; do AS_IF([test X$ax_compiler_ms = Xyes], [ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`], [ax_try_lib="${ax_lib}"]) LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}" AC_LINK_IFELSE([AX_CHECK_GLU_PROGRAM], [ax_cv_check_glu_libglu="${ax_try_lib}"; break]) done ]) AS_IF([test X$ax_compiler_ms = Xyes], [AC_LANG_POP([C])]) AC_LANG_POP([C++]) LIBS=${ax_save_LIBS} CPPFLAGS=${ax_save_CPPFLAGS}]) AS_IF([test "X$ax_cv_check_glu_libglu" = Xno], [no_glu=yes; GLU_CFLAGS=""; GLU_LIBS=""], [AS_IF([test "X$ax_cv_check_glu_libglu" = Xyes], [GLU_LIBS="$GL_LIBS"], [GLU_LIBS="${ax_cv_check_glu_libglu} ${GL_LIBS}"])]) AC_SUBST([GLU_CFLAGS]) AC_SUBST([GLU_LIBS]) # # Some versions of Mac OS X include a broken interpretation of the GLU # tesselation callback function signature. # AS_IF([test "X$ax_cv_check_glu_libglu" != Xno], [AC_CACHE_CHECK([for varargs GLU tesselator callback function type], [ax_cv_varargs_glu_tesscb], [ax_cv_varargs_glu_tesscb=no ax_save_CFLAGS="$CFLAGS" CFLAGS="$GL_CFLAGS $CFLAGS" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # ifdef HAVE_GL_GLU_H # include # else # include # endif]], [[GLvoid (*func)(...); gluTessCallback(0, 0, func)]])], [ax_cv_varargs_glu_tesscb=yes]) CFLAGS="$ax_save_CFLAGS"]) AS_IF([test X$ax_cv_varargs_glu_tesscb = Xyes], [AC_DEFINE([HAVE_VARARGS_GLU_TESSCB], [1], [Use nonstandard varargs form for the GLU tesselator callback])])]) ]) gnubik-2.4/m4/ax_pthread.m40000644000175000017500000002606211550032722012463 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC to any special C compiler that is needed for # multi-threaded programs (defaults to the value of CC otherwise). (This # is necessary on AIX to use the special cc_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also link it with them as well. e.g. you should link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threads programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name # (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # # 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 . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 11 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_SAVE AC_LANG_C ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes) AC_MSG_RESULT($ax_pthread_ok) if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; *-darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $flag]) PTHREAD_CFLAGS="$flag" ;; pthread-config) AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no) if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$flag]) PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_TRY_LINK([#include static void routine(void* a) {a=0;} static void* start_routine(void* a) {return a;}], [pthread_t th; pthread_attr_t attr; pthread_create(&th,0,start_routine,0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0); ], [ax_pthread_ok=yes]) LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" AC_MSG_RESULT($ax_pthread_ok) if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_MSG_CHECKING([for joinable pthread attribute]) attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_TRY_LINK([#include ], [int attr=$attr; return attr;], [attr_name=$attr; break]) done AC_MSG_RESULT($attr_name) if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, [Define to necessary symbol if this constant uses a non-standard name on your system.]) fi AC_MSG_CHECKING([if more special flags are required for pthreads]) flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac AC_MSG_RESULT(${flag}) if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi AC_SUBST(PTHREAD_LIBS) AC_SUBST(PTHREAD_CFLAGS) AC_SUBST(PTHREAD_CC) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_RESTORE ])dnl AX_PTHREAD gnubik-2.4/m4/ax_check_gl.m40000644000175000017500000001203411550032722012565 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_check_gl.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_GL # # DESCRIPTION # # Check for an OpenGL implementation. If GL is found, the required # compiler and linker flags are included in the output variables # "GL_CFLAGS" and "GL_LIBS", respectively. If no usable GL implementation # is found, "no_gl" is set to "yes". # # If the header "GL/gl.h" is found, "HAVE_GL_GL_H" is defined. If the # header "OpenGL/gl.h" is found, HAVE_OPENGL_GL_H is defined. These # preprocessor definitions may not be mutually exclusive. # # LICENSE # # Copyright (c) 2009 Braden McDaniel # # 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 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, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 9 AC_DEFUN([AX_CHECK_GL], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PATH_X])dnl AC_REQUIRE([AX_PTHREAD])dnl AC_LANG_PUSH([C]) AX_LANG_COMPILER_MS AS_IF([test X$ax_compiler_ms = Xno], [GL_CFLAGS="${PTHREAD_CFLAGS}"; GL_LIBS="${PTHREAD_LIBS} -lm"]) # # Use x_includes and x_libraries if they have been set (presumably by # AC_PATH_X). # AS_IF([test "X$no_x" != "Xyes"], [AS_IF([test -n "$x_includes"], [GL_CFLAGS="-I${x_includes} ${GL_CFLAGS}"])] AS_IF([test -n "$x_libraries"], [GL_LIBS="-L${x_libraries} -lX11 ${GL_LIBS}"])) ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}" AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h]) CPPFLAGS="${ax_save_CPPFLAGS}" AC_CHECK_HEADERS([windows.h]) m4_define([AX_CHECK_GL_PROGRAM], [AC_LANG_PROGRAM([[ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GL_H # include # elif defined(HAVE_OPENGL_GL_H) # include # else # error no gl.h # endif]], [[glBegin(0)]])]) AC_CACHE_CHECK([for OpenGL library], [ax_cv_check_gl_libgl], [ax_cv_check_gl_libgl="no" case $host_cpu in x86_64) ax_check_gl_libdir=lib64 ;; *) ax_check_gl_libdir=lib ;; esac ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}" ax_save_LIBS="${LIBS}" LIBS="" ax_check_libs="-lopengl32 -lGL" for ax_lib in ${ax_check_libs}; do AS_IF([test X$ax_compiler_ms = Xyes], [ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`], [ax_try_lib="${ax_lib}"]) LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}" AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM], [ax_cv_check_gl_libgl="${ax_try_lib}"; break], [ax_check_gl_nvidia_flags="-L/usr/${ax_check_gl_libdir}/nvidia" LIBS="${ax_try_lib} ${ax_check_gl_nvidia_flags} ${GL_LIBS} ${ax_save_LIBS}" AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM], [ax_cv_check_gl_libgl="${ax_try_lib} ${ax_check_gl_nvidia_flags}"; break], [ax_check_gl_dylib_flag='-dylib_file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib' LIBS="${ax_try_lib} ${ax_check_gl_dylib_flag} ${GL_LIBS} ${ax_save_LIBS}" AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM], [ax_cv_check_gl_libgl="${ax_try_lib} ${ax_check_gl_dylib_flag}"; break])])]) done AS_IF([test "X$ax_cv_check_gl_libgl" = Xno -a "X$no_x" = Xyes], [LIBS='-framework OpenGL' AC_LINK_IFELSE([AX_CHECK_GL_PROGRAM], [ax_cv_check_gl_libgl="$LIBS"])]) LIBS=${ax_save_LIBS} CPPFLAGS=${ax_save_CPPFLAGS}]) AS_IF([test "X$ax_cv_check_gl_libgl" = Xno], [no_gl=yes; GL_CFLAGS=""; GL_LIBS=""], [GL_LIBS="${ax_cv_check_gl_libgl} ${GL_LIBS}"]) AC_LANG_POP([C]) AC_SUBST([GL_CFLAGS]) AC_SUBST([GL_LIBS]) ])dnl gnubik-2.4/m4/ax_check_glut.m40000644000175000017500000000777111550032722013152 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_check_glut.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_GLUT # # DESCRIPTION # # Check for GLUT. If GLUT is found, the required compiler and linker flags # are included in the output variables "GLUT_CFLAGS" and "GLUT_LIBS", # respectively. If GLUT is not found, "no_glut" is set to "yes". # # If the header "GL/glut.h" is found, "HAVE_GL_GLUT_H" is defined. If the # header "GLUT/glut.h" is found, HAVE_GLUT_GLUT_H is defined. These # preprocessor definitions may not be mutually exclusive. # # LICENSE # # Copyright (c) 2009 Braden McDaniel # # 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 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, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 8 AC_DEFUN([AX_CHECK_GLUT], [AC_REQUIRE([AX_CHECK_GLU])dnl AC_REQUIRE([AC_PATH_XTRA])dnl ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GLU_CFLAGS} ${CPPFLAGS}" AC_CHECK_HEADERS([GL/glut.h GLUT/glut.h]) CPPFLAGS="${ax_save_CPPFLAGS}" GLUT_CFLAGS=${GLU_CFLAGS} GLUT_LIBS=${GLU_LIBS} m4_define([AX_CHECK_GLUT_PROGRAM], [AC_LANG_PROGRAM([[ # if HAVE_WINDOWS_H && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLUT_H # include # elif defined(HAVE_GLUT_GLUT_H) # include # else # error no glut.h # endif]], [[glutMainLoop()]])]) # # If X is present, assume GLUT depends on it. # AS_IF([test X$no_x != Xyes], [GLUT_LIBS="${X_PRE_LIBS} -lXmu -lXi ${X_EXTRA_LIBS} ${GLUT_LIBS}"]) AC_CACHE_CHECK([for GLUT library], [ax_cv_check_glut_libglut], [ax_cv_check_glut_libglut="no" AC_LANG_PUSH(C) ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GLUT_CFLAGS} ${CPPFLAGS}" ax_save_LIBS="${LIBS}" LIBS="" ax_check_libs="-lglut32 -lglut" for ax_lib in ${ax_check_libs}; do AS_IF([test X$ax_compiler_ms = Xyes], [ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'`], [ax_try_lib="${ax_lib}"]) LIBS="${ax_try_lib} ${GLUT_LIBS} ${ax_save_LIBS}" AC_LINK_IFELSE([AX_CHECK_GLUT_PROGRAM], [ax_cv_check_glut_libglut="${ax_try_lib}"; break]) done AS_IF([test "X$ax_cv_check_glut_libglut" = Xno -a "X$no_x" = Xyes], [LIBS='-framework GLUT' AC_LINK_IFELSE([AX_CHECK_GLUT_PROGRAM], [ax_cv_check_glut_libglut="$LIBS"])]) CPPFLAGS="${ax_save_CPPFLAGS}" LIBS="${ax_save_LIBS}" AC_LANG_POP(C)]) AS_IF([test "X$ax_cv_check_glut_libglut" = Xno], [no_glut="yes"; GLUT_CFLAGS=""; GLUT_LIBS=""], [GLUT_LIBS="${ax_cv_check_glut_libglut} ${GLUT_LIBS}"]) AC_SUBST([GLUT_CFLAGS]) AC_SUBST([GLUT_LIBS]) ])dnl gnubik-2.4/m4/ax_lang_compiler_ms.m40000644000175000017500000000222511550032722014341 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_lang_compiler_ms.html # =========================================================================== # # SYNOPSIS # # AX_LANG_COMPILER_MS # # DESCRIPTION # # Check whether the compiler for the current language is Microsoft. # # This macro is modeled after _AC_LANG_COMPILER_GNU in the GNU Autoconf # implementation. # # LICENSE # # Copyright (c) 2009 Braden McDaniel # # 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. This file is offered as-is, without any # warranty. #serial 8 AC_DEFUN([AX_LANG_COMPILER_MS], [AC_CACHE_CHECK([whether we are using the Microsoft _AC_LANG compiler], [ax_cv_[]_AC_LANG_ABBREV[]_compiler_ms], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#ifndef _MSC_VER choke me #endif ]])], [ax_compiler_ms=yes], [ax_compiler_ms=no]) ax_cv_[]_AC_LANG_ABBREV[]_compiler_ms=$ax_compiler_ms ])]) gnubik-2.4/TODO0000644000175000017500000000123311545563565010265 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/src/0000755000175000017500000000000011550033307010423 500000000000000gnubik-2.4/src/control.h0000644000175000017500000000176111545563565012223 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/src/dialogs.h0000644000175000017500000000176511547337622012164 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/src/automake.mk0000644000175000017500000000212311545563565012522 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 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/src/glarea-common.c0000644000175000017500000000647011547340502013243 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) { 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/src/txfm.h0000644000175000017500000000342311547340340011500 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/src/quarternion.h0000644000175000017500000000253411547340154013076 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/src/cubeview.c0000644000175000017500000006234411545563565012353 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_Right: if (shifted) { dir = 0; axis = 2; } else { dir = 1; axis = 1; } break; case GDK_Left: if (shifted) { dir = 1; axis = 2; } else { dir = 0; axis = 1; } break; case GDK_Up: axis = 0; dir = 0; break; case GDK_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/src/swatch.h0000644000175000017500000000356411545563565012037 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/src/game.c0000644000175000017500000002052411545563565011445 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/src/version.h0000644000175000017500000000152311545563565012224 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/src/cursors.c0000644000175000017500000003254511547342545012235 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/src/quarternion.c0000644000175000017500000000706711547340141013073 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/src/cubeview.h0000644000175000017500000000755211545563565012360 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/src/textures.c0000644000175000017500000000522611547340320012401 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/src/game.h0000644000175000017500000000667411545563565011464 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/src/select.h0000644000175000017500000000346211547340205012004 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/src/control.c0000644000175000017500000001330211547256563012207 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 (w->window, 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/src/txfm.c0000644000175000017500000000663711545563565011523 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/src/dialogs.c0000644000175000017500000001577311545563565012170 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 { GtkObject *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] = 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 (dialog)->vbox), vbox); gtk_widget_show_all (GTK_DIALOG (dialog)->vbox); 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/src/colour-dialog.c0000644000175000017500000003121411545563565013272 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); 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 (dialog)->vbox), 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 (dialog)->vbox), 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/src/cube_i.h0000644000175000017500000000502411547337571011763 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/src/cube.c0000644000175000017500000004544311545563565011461 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 li = -1; int i; for (i = 0; i < 3; ++i) { if (biggest < gbk_cube_get_size (cube, i)) { biggest = gbk_cube_get_size (cube, i); li = 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/src/main.c0000644000175000017500000001232311545563565011456 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" 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; 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 && HAVE_GL_GLUT_H 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"); /* 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); 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/src/menus.h0000644000175000017500000000246611547343641011666 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/src/swatch.c0000644000175000017500000001771511545563565012035 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 ("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) { GbkSwatch *sw = GBK_SWATCH (data); if (sw->pixbuf == NULL) { gdk_draw_rectangle (w->window, sw->gc, TRUE, 0, 0, w->allocation.width, w->allocation.height); } else { GdkPixbuf *scaled_pixbuf = 0; gint width, height; gdk_drawable_get_size (w->window, &width, &height); scaled_pixbuf = gdk_pixbuf_scale_simple (sw->pixbuf, width, height, GDK_INTERP_NEAREST); g_assert (scaled_pixbuf); gdk_draw_pixbuf (w->window, 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 (selection_data->length < 0) { g_warning ("Empty drag data"); success = FALSE; goto end; } switch (info) { case GBK_DRAG_COLOUR: { guint16 *vals; GdkColor colour; if ((selection_data->format != 16) || (selection_data->length != 8)) { success = FALSE; g_warning ("Received invalid color data"); goto end; } vals = (guint16 *) selection_data->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 = 0; gchar **start = 0; start = s = g_strsplit ((const gchar *) selection_data->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 (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 (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 ("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/src/move.c0000644000175000017500000000666511545563565011514 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/src/guile-hooks.h0000644000175000017500000000204211545563565012762 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/src/colour-dialog.h0000644000175000017500000000164311545563565013302 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/src/guile-hooks.c0000644000175000017500000001372611545563565012770 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_NULLP (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/src/select.c0000644000175000017500000002011411547340172011773 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_Shift_L && e->keyval != GDK_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) { return w->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/src/cube.h0000644000175000017500000000716611547337521011457 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/src/cursors.h0000644000175000017500000000204111545563565012233 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/src/drwBlock.c0000644000175000017500000002730611547342773012306 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 && HAVE_GL_GLUT_H #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 && HAVE_GL_GLUT_H { 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/src/drwBlock.h0000644000175000017500000000177511547342762012313 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/src/move.h0000644000175000017500000000373411545563565011513 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/src/menus.c0000644000175000017500000003422511545563565011666 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, 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")}, {"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, 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/src/version.c0000644000175000017500000000311211545563565012213 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/src/textures.h0000644000175000017500000000163111547340275012413 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/src/glarea.h0000644000175000017500000000167011547337700011765 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" void perspectiveSet (struct scene_view *); void scene_init (GbkCubeview *); void projection_init (struct scene_view *, int jitter); #endif gnubik-2.4/THANKS0000644000175000017500000000000011545563565010477 00000000000000gnubik-2.4/ChangeLog0000644000175000017500000006262411550032733011342 000000000000002011-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-20003 John Darrington * Rubik 1.13 Released * Ported to GTK+ 07-14-2002 John Darrington * Rubik 1.12 Released gnubik-2.4/build-aux/0000755000175000017500000000000011550033307011526 500000000000000gnubik-2.4/build-aux/install-sh0000755000175000017500000003253711550032734013467 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2009-04-28.21; # 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. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # 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_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' 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 no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --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 *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done 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 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 trap '(exit $?); exit' 1 2 13 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 starting with `-'. 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 # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` 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-writeable 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 eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && 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` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob 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/build-aux/config.guess0000755000175000017500000012761511550032734014005 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 # Free Software Foundation, Inc. timestamp='2009-11-20' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # 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 me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 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 # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; 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 ;; *: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'` exit ;; 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:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *: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:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 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-gnu`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/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix 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="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu 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-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu 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-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu 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 ;; 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 case $UNAME_PROCESSOR in i386) eval $set_cc_for_build 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 UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac 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 ;; 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 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnubik-2.4/build-aux/depcomp0000755000175000017500000004426711550032735013044 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2009-04-28.21; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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 outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac 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" # 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 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 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 -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 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 -eq 0; then : else 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,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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:: \1 \\:p' >> "$depfile" echo " " >> "$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/build-aux/config.rpath0000755000175000017500000004401211545563565014001 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=/' <. Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 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-dietlibc | linux-newlib* | 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/'` ;; *) 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*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | 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 \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | 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 | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-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-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | 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-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | 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-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | 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-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | 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 ;; 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) 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'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; 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 ;; mingw32) basic_machine=i386-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 ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; 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) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) 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 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-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 ;; 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* \ | -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* \ | -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* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # 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 ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -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 ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; 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/build-aux/texinfo.tex0000644000175000017500000110035111550032735013651 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2009-08-14.15} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009 Free Software Foundation, Inc. % % This texinfo.tex 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 texinfo.tex file is distributed in the hope that 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, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % 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\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% Math-mode def from plain.tex. \let\ptexraggedright=\raggedright % 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\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\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \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} % @| 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). % \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 }% }% } % 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\undefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % 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} % For @cropmarks command. % 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 out 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, but... --kasal, 06nov03 \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \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\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \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{\selectfonts\lllsize A}\vss}}% \kern-.15em \TeX } % 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\*{\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 % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \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'. % \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 } % @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. \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\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\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 = {}% } % @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 \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not % otherwise define @\. % % 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 } } % 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 } % @comma{} is so commas can be inserted into text without messing up % Texinfo's parsing. % \let\comma = , % @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 \undefined, % borrowed from ifpdf.sty. \ifx\pdfoutput\undefined \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. % 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). % double active backslashes. % {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslashdouble{% @catcode`@\=@active @let\=@doublebackslash} } % To handle parens, we must adopt a different approach, since parens are % not active characters. hyperref.dtx (which has the same problem as % us) handles it with this amazing macro to replace tokens, with minor % changes for Texinfo. It is included here under the GPL by permission % from the author, Heiko Oberdiek. % % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. % \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% \ifx\\##2\\% \else #2% \HyReturnAfterFi{% \HyPsdReplace##2\END }% \fi }% \xdef#3{\expandafter\HyPsdReplace#3#1\END}% } \long\def\HyReturnAfterFi#1\fi{\fi#1} % #1 is a control sequence in which to do the replacements. \def\backslashparens#1{% \xdef#1{#1}% redefine it as its expansion; the definition is simply % \lastnode when called from \setref -> \pdfmkdest. \HyPsdSubst{(}{\realbackslash(}{#1}% \HyPsdSubst{)}{\realbackslash)}{#1}% } \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\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .png, .jpg, .pdf (among % others). Let's try in that order. \let\pdfimgext=\empty \begingroup \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \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 \imagewidth \fi \ifdim \wd2 >0pt height \imageheight \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 \activebackslashdouble \makevalueexpandable \def\pdfdestname{#1}% \backslashparens\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. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else % Doubled backslashes in the name. {\activebackslashdouble \xdef\pdfoutlinedest{#3}% \backslashparens\pdfoutlinedest}% \fi % % Also double the backslashes in the display string. {\activebackslashdouble \xdef\pdfoutlinetext{#1}% \backslashparens\pdfoutlinetext}% % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \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. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \setupdatafile \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\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}} % Default leading. \newdimen\textleading \textleading = 13.2pt % 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} % \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\undefined \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 #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (currently only OT1, OT1IT and OT1TT are allowed, pass % empty to omit). \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 % emacs-page 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\undefined \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. This is 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} % reset the current fonts \textfonts \rm } % end of 11pt text font size definitions % 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} % reduce space between paragraphs \divide\parskip by 2 % reset the current fonts \textfonts \rm } % end of 10pt text font size definitions % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xword{10} \def\xiword{11} % \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{25pt}} \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} \gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright \let\markupsetuplqsamp \markupsetnoligaturesquoteleft \let\markupsetuplqkbd \markupsetnoligaturesquoteleft % Allow an option to not replace quotes with a regular directed right % quote/apostrophe (char 0x27), but instead use 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 } % [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 %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else \ptexslash\fi\fi\fi} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally uses \ttsl. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\slanted=\smartslanted \def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} \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}} % 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} % ctrl is no longer a Texinfo command. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \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 } % 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-\realdash \let_\realunder \fi \codex } } \def\realdash{-} \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{}{}{}}% {\_}% } \def\codex #1{\tclose{#1}\endgroup} % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \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'}% \fi\fi } % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} % @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 option `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#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} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % @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. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#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} % @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 % 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 } % @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 } \message{glyphs,} % @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 error\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}% \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 \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\undefined \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 } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rmisbold #1} % 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{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % 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\undefined \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 \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-\realdash \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 ifclear reads 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}} % @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 in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace % % 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\_% % % 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\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\expansion \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \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\sc \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \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}% % Hopefully, all control words can become @asis. \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\@{@}% % how to handle braces? \def\_{\normalunderscore}% % % 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\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \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}% % % 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 } \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 % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \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. % \unnumberedno is an oxymoron, of course. 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 achive this, remember the "biggest" unnum. sec. we are currently in: \chardef\unmlevel = \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 < \unmlevel \chardef\unmlevel = \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 > \unmlevel \def\headtype{U}% \else \chardef\unmlevel = 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 } \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \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}% } \outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. \outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } \outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \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 % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}% \bigskip \par\penalty 200\relax \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} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \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 \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% \hbox to 0pt{}% \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{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \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 {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}\bigskip \par\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 {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rmisbold #1}\hfill}}\bigskip \par\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{% {% % 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.) \vskip-\parskip % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: % % @section sec-whatever % @deffn def-whatever \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\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, ... % 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 tex @ 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=`\\ % \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% \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 by one command: \def\makedispenv #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 synonyms: \def\maketwodispenvs #1#2#3{ \makedispenv{#1}{#3} \makedispenv{#2}{#3} } % @lisp: indented, narrowed, typewriter font; @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvs {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. % \makedispenv {display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenv{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 \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. % \def\quotationstart{% {\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 \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi \parsearg\quotationlabel } \envdef\quotation{% \setnormaldispenv \quotationstart } \envdef\smallquotation{% \setsmalldispenv \quotationstart } \let\Esmallquotation = \Equotation % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\undefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } % 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 } % 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 % \def\starttabbox{\setbox0=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen0=\wd0 % the width so far, or since the previous tab \divide\dimen0 by\tabw \multiply\dimen0 by\tabw % compute previous multiple of \tabw \advance\dimen0 by\tabw % advance to next multiple of \tabw \wd0=\dimen0 \box0 \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\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. \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 minor 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 \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 \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% 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}% \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 {} } %%% Type: % @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{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type 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. % 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 % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to 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}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #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. Let's try @var for that. \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\undefined \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 \example \spaceisspace % % Append \endinput to make sure that TeX does not see the ending newline. % I've verified that it is necessary both for e-TeX and for ordinary TeX % --kasal, 29nov03 \scantokens{#1\endinput}% \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 \. % 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{% \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{% \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% \scanctxt \catcode`\\=\other } % \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\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% \else \expandafter\parsemargdef \argl;% \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}} % 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 be ##N where N is the position in that list. % 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. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \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} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, 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 % many \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}}% \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 % many \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}% \fi \fi} \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. Just 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, during \shipout }% \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,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We 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 % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. \getfilename{#4}% % % See comments at \activebackslashdouble. {\activebackslashdouble \xdef\pdfxrefdest{#1}% \backslashparens\pdfxrefdest}% % \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\wd0 = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 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 \wd1 > 0pt \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (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 a macro 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 \endlink \endgroup} % 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 \message{\linenumber Undefined cross reference `#1'.}% \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 \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\undefined \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 this 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 \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. On the other hand, if % it's at the top level, we don't want the normal paragraph indentation. \noindent % % 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 \fi % space after the standalone image \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{~} \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{\guilletright} \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{~} \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{\'\i} \gdef^^ee{\^\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 so finicky about underfull hboxes, either. \hbadness = 2000 % 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.} % 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 \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix % 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 @def@normalbackslash{{@tt@backslashcurfont}} % 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. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % @def@normalturnoffactive{% @let\=@normalbackslash @let"=@normaldoublequote @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix @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 look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @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/build-aux/compile0000755000175000017500000000727111550032734013036 00000000000000#! /bin/sh # Wrapper for compilers which do not understand `-c -o'. scriptversion=2009-10-06.20; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 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 # . 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 $? ;; esac ofile= cfile= eat= 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/build-aux/missing0000755000175000017500000002623311550032734013056 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2009-04-28.21; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009 Free Software Foundation, Inc. # Originally 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 run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar*) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # 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/po/0000755000175000017500000000000011550033307010252 500000000000000gnubik-2.4/po/tr.po0000644000175000017500000001736511550033131011166 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: 2011-04-09 12:35+0200\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" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Resim" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Renk seçici" #: src/colour-dialog.c:313 msgid "Image" msgstr "Resim" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "_Seç" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Bir resim dosyası seçin" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Döşeli" #: src/colour-dialog.c:326 #, 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:331 msgid "_Mosaic" msgstr "_Mozaik" #: src/colour-dialog.c:335 #, 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:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Yardım" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Ayarlar" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Oyun/_Yeni Oyun" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Renk" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Canlandırma" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Daha hızlı" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Daha yavaş" #: src/menus.c:454 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:37 msgid "_Randomize" 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/po/automake.mk0000644000175000017500000000375711545563565012367 00000000000000DOMAIN=$(PACKAGE) MSGID_BUGS_ADDRESS=$(PACKAGE_BUGREPORT) XGETTEXT=xgettext MSGMERGE=msgmerge MSGFMT=msgfmt POFILES=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/he.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/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) @$(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) --language=scheme --keyword=_ --keyword=N_ -j -o $@ $(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/po/zh_CN.po0000644000175000017500000001733011550033131011532 00000000000000# Chinese/Simplified translations for GNUbik # LI Daobing , 2007. # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2007-01-31 05:35+0800\n" "Last-Translator: LI Daobing \n" "Language-Team: Chinese/Simplified \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 "选择图片" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "图片" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "选择颜色" #: src/colour-dialog.c:313 msgid "Image" msgstr "图片" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "打开图片文件(_l)" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "选择图片文件" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "排列(_t)" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "在每个小快上放一个图片的拷贝" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "马赛克(_m)" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "将图片放在魔方的整个面上" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "/游戏(_g)/新建游戏(_n)" #: 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 #, fuzzy, 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 "/游戏(_g)" #: src/menus.c:229 msgid "_View" msgstr "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/帮助(_h)" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/设置(_s)/显示\\/隐藏(_w)" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/游戏(_g)/新建游戏(_n)" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "颜色" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "动画" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "快" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "慢" #: src/menus.c:454 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 "颜色和模式范例,点击此处选择新的颜色或模式,或者拖拽一个到此处。" #: 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:37 msgid "_Randomize" 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 "工具栏(_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/po/fr.po0000644000175000017500000001747311550033130011147 00000000000000# French ( fr ) translations for GNUbik # Copyright (C) 2003 John Darrington # John Darrington , 2003. # Guy Decarpentrie , 2003 # msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2003-10-26 13:52+0100\n" "Last-Translator: Guy Decarpentrie \n" "Language-Team: Français \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\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Choix de l'image" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Image" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Choix de la couleur" #: src/colour-dialog.c:313 msgid "Image" msgstr "Image" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Se_lection" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Choisir un fichier image" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Carrelé" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Appliquer un copie de l'image\n" "sur chaque bloc" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaïque" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Appliquer une copie de l'image sur\n" "toute la face du cube" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, fuzzy msgid "Remove image from the cube face" msgstr "Utiliser une image sur le côté du cube" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Taille du cube :" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Préciser le nombre de blocs sur chaque côté" #: 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 "/_Jeux/_Nouveau jeux" #: 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 "Mouvements : %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 mouvements" msgstr[1] "Cube résolu en %d mouvements" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Le cube n'est PAS fini ! 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] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Jeux" #: src/menus.c:229 msgid "_View" msgstr "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Aide" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Réglages" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Jeux/_Nouveau jeux" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Couleur" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animation" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Plus vite" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Moins vite" #: src/menus.c:454 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 exemple de la couleur ou du modèle. Vous pouvez cliquer et choisir une " "nouvelle couleur ou modèle, ou l'appliquer à 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 "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:37 msgid "_Randomize" 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 de créer l'image à partir du fichier %s:%s" #~ msgid "Pattern" #~ msgstr "Modèle" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Cliquer içi pour appliquer un modèle sur une surface du cube" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Défini la vitesse à laquelle tournent les tranches" #~ msgid "Preferences" #~ msgstr "Préférences" #~ msgid "Lighting" #~ msgstr "Lumière" #~ msgid "Enable lighting" #~ msgstr "Activer la lumière" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Fait que le cube est illuminé" #~ msgid "Start cube with new settings?" #~ msgstr "Commencer le cube avec les nouveaux réglages ?" #~ msgid "/_Game/sep" #~ msgstr "/_Jeux/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Jeux/_Quitter" #~ msgid "/_Settings" #~ msgstr "/_Réglages" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Réglages/_Préférences" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Réglages/_Couleurs" #~ msgid "/_Help/_About" #~ msgstr "/_Aide/_Apropos" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Réglages" gnubik-2.4/po/nl.po0000644000175000017500000002036111550033131011140 00000000000000# Dutch translation for GNUbik # Copyright (C) 2003-2010 John Darrington # This file is distributed under the same license as the gnubik package. # John Darrington , 2003. # Lidwine van As , 2005. # Erwin Poeze , 2010. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.3\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2010-12-01 08:54+0100\n" "Last-Translator: Erwin Poeze \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" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Afbeeldingenkiezer" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Alle afbeeldingen" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Alle bestanden" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Kleurenkiezer" #: src/colour-dialog.c:313 msgid "Image" msgstr "Afbeelding" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Se_lecteren" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Selecteer een afbeeldingsbestand" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "Ge_tegeld" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "Plaats afbeelding op ieder afzonderlijk blokje" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mozaiek" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "Verdeel afbeelding over gehele oppervlak" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, fuzzy msgid "Remove image from the cube face" msgstr "Gebruik afbeelding als kubusoppervlak" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Grootte van de kubus:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: 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 "" #: 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 "/_Spel/_Nieuw spel" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Afmetingen" #: 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 "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 in %d stap opgelost" msgstr[1] "Kubus 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] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Spel" #: src/menus.c:229 msgid "_View" msgstr "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Hulp" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Instellingen/_Tonen\\/Verbergen" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Spel/_Nieuw spel" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Kleur" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animatie" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Sneller" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Langzamer" #: src/menus.c:454 msgid "Rewind" msgstr "Stap terug" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning) of the sequence of moves" msgstr "Ga naar de vorige markering in (of het begin van) de stappenreeks" #: src/menus.c:462 msgid "Back" msgstr "Terug" #: src/menus.c:463 msgid "Make one step backwards" msgstr "Ga een stap terug" #: src/menus.c:468 msgid "Stop" msgstr "Stoppen" #: src/menus.c:469 msgid "Stop running the sequence of moves" msgstr "Stop afspelen van stappenreeks" #: src/menus.c:475 msgid "Mark" msgstr "Markeren" #: src/menus.c:476 msgid "Mark the current place in the sequence of moves" msgstr "Markeer de huidige locatie in de stappenreeks" #: src/menus.c:482 msgid "Forward" msgstr "Vooruit" #: src/menus.c:483 msgid "Make one step forwards" msgstr "Ga een stap vooruit" #: src/menus.c:488 msgid "Play" msgstr "Afspelen" #: src/menus.c:489 msgid "Run forward through the sequence of moves" msgstr "Loop door de stappenreeks heen" #: 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 "" "Voorbeeld van de gekozen kleur of patroon. Selecteer een andere kleur of " "patroon 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 "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:37 msgid "_Randomize" 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 "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/sep" #~ msgstr "/_Spel/sep" #~ 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/po/it.po0000644000175000017500000001744311550033130011151 00000000000000# Italian translation of GNUbik package. # Copyright (C) 2003 John Darrington # Marco Ciampa , 2003. # msgid "" msgstr "" "Project-Id-Version: 2.0\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2003-12-28 16:15+0100\n" "Last-Translator: Marco Ciampa \n" "Language-Team: italian , \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 "Selettore immagine" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Immagine" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Selettore colori" #: src/colour-dialog.c:313 msgid "Image" msgstr "Immagine" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Se_leziona" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Seleziona un file immagine" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Piastrellato" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Piazza una copia dell'immagine\n" "in ogni blocco" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaico" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Piazza una copia dell'immagine attraverso\n" "l'intera faccia del cubo" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, fuzzy msgid "Remove image from the cube face" msgstr "Usa un file immagine sulla faccia del cubo" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Ampiezza 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 "Imposta il numero dei blocchi per ogni lato" #: 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 "/_Gioco/_Nuovo gioco" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensioni" #: 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 "Muovi: %d" #: src/menus.c:173 #, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Il cubo è stato risolto in %d mosse" msgstr[1] "Il cubo è stato risolto in %d mosse" #: src/menus.c:183 #, fuzzy 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] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Gioco" #: src/menus.c:229 msgid "_View" msgstr "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Aiuto" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Impostazioni" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Gioco/_Nuovo gioco" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Colore" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animazione" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Più veloce" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Più lento" #: src/menus.c:454 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 campione del colore del motivo. Puoi fare clic e selezionare un nuovo " "colore o motivo oppure trascinarne uno su questo spazio." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf ha il numero di canali sbagliato" #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf ha uno spazio colore sconosciuto: %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:37 msgid "_Randomize" 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 "Impossibile creare l'immagine dal file %s: %s" #~ msgid "Pattern" #~ msgstr "Motivo" #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Fare clic qui per usare un motivo sulla superfice del cubo" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Controlla la velocità con la quale ruotano i dadi" #~ msgid "Preferences" #~ msgstr "Preferenze" #~ msgid "Lighting" #~ msgstr "Illuminazione" #~ msgid "Enable lighting" #~ msgstr "Abilita l'illuminazione" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Fai in modo che il cubo appaia illuminato" #~ msgid "Start cube with new settings?" #~ msgstr "Esegui il cubo con le nuove impostazioni?" #~ msgid "/_Game/sep" #~ msgstr "/_Gioco/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/Gioco/_Esci" #~ msgid "/_Settings" #~ msgstr "/_Impostazioni" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Impostazioni/_Preferenze" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Impostazioni/_Colori" #~ msgid "/_Help/_About" #~ msgstr "/_Aiuto/_Informazioni" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Impostazioni" gnubik-2.4/po/ru.po0000644000175000017500000002257411550033131011165 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: 2011-04-09 12:35+0200\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 "Выбор изображения" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Изображение" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Выбор цвета" #: src/colour-dialog.c:313 msgid "Image" msgstr "Изображение" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "_Выбор" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Выбор файла изображения" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Встык" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Разместить копию изображения\n" "на каждом блоке" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Мозаика" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Разместить копию изображения\n" "на всей поверхности куба" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Подсказка" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Настройки/Показать\\/Скрыть" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Игра/_Новая игра" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Цвет" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Анимация" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Быстрее" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Медленнее" #: src/menus.c:454 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 "" "Пример цвета или шаблона. Вы можете выбрать новый цвет или шаблон щелчком " "или перенести его сюда." #: 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:37 msgid "_Randomize" 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/po/en_US.po0000644000175000017500000001371311550033130011542 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-04-09 12:35+0200\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 "" #: src/colour-dialog.c:209 msgid "All Images" msgstr "" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Color selector" #: src/colour-dialog.c:313 msgid "Image" msgstr "" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "" #: src/colour-dialog.c:326 msgid "Place a copy of the image on each block" msgstr "" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "" #: src/colour-dialog.c:335 msgid "Place a copy of the image across the entire face of the cube" msgstr "" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 msgid "_Help" msgstr "" #: src/menus.c:235 msgid "Sho_w/Hide" msgstr "" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 msgid "_New Game" msgstr "" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 msgid "_Colours" msgstr "_Colors" #: src/menus.c:331 msgid "_Animation" msgstr "" #: src/menus.c:335 msgid "_Faster" msgstr "" #: src/menus.c:339 msgid "_Slower" msgstr "" #: src/menus.c:454 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:37 msgid "_Randomize" 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/po/pl.po0000644000175000017500000002066511550033131011151 00000000000000# Polish messages for GNUbik -*- mode: po; buffer-file-coding-system: utf-8; default-input-method: latin-2-prefix -*- # Copyright (C) 2004 John Darrington # This file is distributed under the same license as the GNUbik package. # # Local Variables: # Local IspellDict: polish # End: msgid "" msgstr "" "Project-Id-Version: GNUbik 2.2\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2004-11-26 16:06+0200\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 pliku" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Obraz" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Wybór koloru" #: src/colour-dialog.c:313 msgid "Image" msgstr "Obraz" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "_Wybór" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Wybiera plik obrazu" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Kafelki" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Rozmieść kopię obrazu\n" "na każdym bloku" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mozaika" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Rozmieść kopię obrazu na całej\n" "stronie sześcianu" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, fuzzy msgid "Remove image from the cube face" msgstr "Użycie pliku obrazu dla strony sześcianu" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Rozmiar sześcianu:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: 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 "" #: 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 "/_Gra/_Nowa gra" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Wymiary:" #: 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 "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 #, fuzzy 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] "" msgstr[1] "" msgstr[2] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Gra" #: src/menus.c:229 msgid "_View" msgstr "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Pomóc" # FIXME: Schowaj? #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Ustawienia/Pokaż\\/Ukryj" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Gra/_Nowa gra" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Kolor" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animacja" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Szybciej" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Wolniej" #: src/menus.c:454 msgid "Rewind" msgstr "Przewinięńcie" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning) of the sequence of moves" msgstr "" "Przejśćie do poprzedniego znacznika bądź 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 "Jedne 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 "" #: 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 "" "Wzór koloru bądź desenia. Kliknij i wybierz nowy kolor czy\n" "deseń, albo przeciągnij go tutaj" #: 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 "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:37 msgid "_Randomize" 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 "Nie można utworzyć obrazu z pliku %s: %s" #~ msgid "Pattern" #~ msgstr "Deseń" # By nałożyć deseń na ... #~ msgid "Click here to use a pattern on the cube surface" #~ msgstr "Kliknij tutaj by użyć tego desenia na powierzchni sześcianu." #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Ustawia szybkość obracania wycinków" #~ msgid "Preferences" #~ msgstr "Preferencje" #~ msgid "Lighting" #~ msgstr "Oświetlenie" #~ msgid "Enable lighting" #~ msgstr "Włącza oświetlenie" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Włącza oświetlenie sześcianu" #~ msgid "Start cube with new settings?" #~ msgstr "Rozpocząć grę z nowymi ustawieniami?" #~ msgid "_Play Toolbar" #~ msgstr " Pasek narzędzi gry" #~ msgid "_Status Bar" #~ msgstr " Pasek stanu" #~ msgid "/_Game/sep" #~ msgstr "/_Gra/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Gra/_Wyjście" #~ msgid "/_Settings" #~ msgstr "/_Ustawienia" #~ msgid "/_Settings/_Preferences" #~ msgstr "/_Ustawienia/_Preferencje" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Ustawienia/_Kolory" #~ msgid "/_Help/_About" #~ msgstr "/_Pomoc/_O programie" #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Ustawienia/Pokaż\\/Ukryj" gnubik-2.4/po/ro.po0000644000175000017500000001744311550033131011156 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: 2011-04-09 12:35+0200\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" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Imagine" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Selector culoare" #: src/colour-dialog.c:313 msgid "Image" msgstr "Imagine" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Se_lectare" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Selectează un fişier imagine" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "Aranjat(_Tiled)" #: src/colour-dialog.c:326 #, 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:331 msgid "_Mosaic" msgstr "_Mozaic" #: src/colour-dialog.c:335 #, 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:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/Ajutor(_Help)" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Setări" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/Joc(_Game)/Joc _Nou" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Culoare" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animaţie" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Mai Rapid" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Mai Încet" #: src/menus.c:454 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:37 msgid "_Randomize" 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/po/he.po0000644000175000017500000002025511550033130011124 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: 2011-04-09 12:35+0200\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 "בוחר תמונה" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "תמונה" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "בוחר צבע" #: src/colour-dialog.c:313 msgid "Image" msgstr "תמונה" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "_בחר" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "בחר קובץ תמונה" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_פרוש" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "שים העתק של התמונה\n" "בכל בלוק" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "פ_סיפס" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "שים העתק של התמונה על-פני\n" "כל משטח הקובייה" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_עזרה" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_הגדרות" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_משחק/משחק _חדש" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "צבע" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "הנפשה" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "מהיר יותר" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "איטי יותר" #: src/menus.c:454 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:37 msgid "_Randomize" 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/po/sr.po0000644000175000017500000002224411550033131011155 00000000000000# Serbian translation of `gnubik' # Copyright (C) 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # Jay A. Fleming , 2010. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.3\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2010-12-11 08:54+0100\n" "Last-Translator: Jay A. Fleming \n" "Language-Team: Serbian \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 "Избор слике" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Све слике" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Све датотеке" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Избор боје" #: src/colour-dialog.c:313 msgid "Image" msgstr "Слика" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Иза_бери" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Изаберите слику" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "Попло_чано" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Постави слику на све\n" "блокове једне стране" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Мозаик" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Постави слику на\n" "једну страну коцке" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 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 "" "Поставља број блокова на једној \n" "страни (нпр. 3, за 3x3; 5 за 5x5; ...)" #: 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 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Помоћ" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/По_ставке/При_кажи\\/Сакриј" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Игра/_Нова игра" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Боја" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Брзина окретања" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Брже" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Спорије" #: src/menus.c:454 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 "" "Боју блокова постављате кликом на круг боја или превлачењем боје испод њега. " "Мустру постављате кликом на неку од доњих мустри." #: 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:37 msgid "_Randomize" 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/po/ca.po0000644000175000017500000001745211550033130011120 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: 2011-04-09 12:35+0200\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" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Imatge" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Selector de color" #: src/colour-dialog.c:313 msgid "Image" msgstr "Imatge" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Se_leccionar" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Seleccionar un arxiu imatge" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "En _mosaic" #: src/colour-dialog.c:326 #, 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:331 msgid "_Mosaic" msgstr "_Ajustat" #: src/colour-dialog.c:335 #, 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:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Ajuda" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Opcions" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Joc/_Nou Joc" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Color" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animació" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Més ràpid" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Més lent" #: src/menus.c:454 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:37 msgid "_Randomize" 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/po/pt_BR.po0000644000175000017500000001760511550033131011544 00000000000000# Message file for brazilian portuguese version of GRubik # Copyright (C) 2003 John Darrington # John Darrington , 2003. # msgid "" msgstr "" "Project-Id-Version: GRubik 1.16\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2003-08-01 19:01+0200\n" "Last-Translator: Miguel Tostes Ribeiro \n" "Language-Team: Brazilian \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 "Seletor de imagem" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Imagem" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Seletor de Cor" #: src/colour-dialog.c:313 msgid "Image" msgstr "Imagem" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Se_lecione" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Selecione um arquivo de imagem" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Lado a lado" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Coloque uma cópia da imagem\n" "em cada bloco" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaico" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Coloque uma cópia da imagem \n" "ocupando toda a face do cubo" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, fuzzy msgid "Remove image from the cube face" msgstr "Use um arquivo de 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 "Escolha 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 "/_Spiel/_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 #, fuzzy, c-format msgid "Moves: %d / %d" msgstr "Movimentos: %d" #: src/menus.c:173 #, fuzzy, c-format msgid "Cube solved in %d move" msgid_plural "Cube solved in %d moves" msgstr[0] "Cubo solucionado em %d movimentos" msgstr[1] "Cubo solucionado em %d movimentos" #: src/menus.c:183 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "" "Cubo não foi solucionado! As cores estão corretas, mas tem orientações " "incorretas" #: 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Ajuda" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Escolhas" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Spiel/_Novo Jogo" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Cor" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animação" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Mais rápido" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Mais devagar" #: src/menus.c:454 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 "Erro GRubik" #: 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 "" "Um examplo da cor ou padrão. Você pode clicar e obter uma nova cor ounovo " "padrão, ou ainda arrastar uma um já existente para este espaço." #: src/textures.c:81 msgid "Pixbuf has wrong number of channels" msgstr "Pixbuf tem um número errado de canais." #: src/textures.c:90 #, c-format msgid "Pixbuf has unknown colorspace: %d" msgstr "Pixbuf tem um espaço de cor desconhecido: %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:37 msgid "_Randomize" 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 "Não é possí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 criar um padrão na superfície do cubo" #~ msgid "Controls the speed with which slices rotate" #~ msgstr "Controla a rapidez da rotação da fatia" #~ msgid "Preferences" #~ msgstr "Preferências" #~ msgid "Lighting" #~ msgstr "Iluminação" #~ msgid "Enable lighting" #~ msgstr "Habilita iluminação" #~ msgid "Makes the cube appear illuminated" #~ msgstr "Faz o cubo aparecer iluminado" #~ msgid "Start cube with new settings?" #~ msgstr "Inicia cubo com as novas escolhas?" #~ msgid "/_Game/sep" #~ msgstr "/_Jogo/sep" #~ msgid "/_Game/_Quit" #~ msgstr "/_Jogo/_Sair" #~ msgid "/_Settings" #~ msgstr "/_Escolhas" #~ msgid "/_Settings/_Preferences" #~ msgstr "/Einstellungen/E_instellungen" #~ msgid "/_Settings/_Colours" #~ msgstr "/_Escolhas/_Cores" #~ msgid "/_Help/_About" #~ msgstr "/_Ajuda/_Informação" #, fuzzy #~ msgid "/Settings/Show\\/Hide" #~ msgstr "/_Escolhas" #~ msgid "R_eset" #~ msgstr "_Reiniciar" #~ msgid "Starts a new cube with specified size" #~ msgstr "Inicia um novo cubo com o tamanho escolhido" gnubik-2.4/po/nb.po0000644000175000017500000001716011550033131011131 00000000000000# Norwegian 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: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2003-08-11 19:32-0100\n" "Last-Translator: Stian Hole \n" "Language-Team: \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 "Bildevelger" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Bilde" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Fargevelger" #: src/colour-dialog.c:313 msgid "Image" msgstr "Bilde" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Ve_lg" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Velg en bildefil" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Side ved side" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Plasser en kopi av bildet\n" "på hver blokk" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaikk" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Plasser en kopi av bilde over\n" "hele overflaten til kuben" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, fuzzy msgid "Remove image from the cube face" msgstr "Bruk en bildefil på kubens overflate" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Størrelse på kuben:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: 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 "" #: 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 "/_Spill/_Nytt spill" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensjoner" #: 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 "Trekk: %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 #, fuzzy msgid "" "Cube is NOT solved! The colours are correct, but have incorrect orientation" msgstr "Kuben er IKKE løst! Fargene stemmer, men orientering er ikke rett" #: 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 "/_Spill" #: src/menus.c:229 msgid "_View" msgstr "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Hjelp" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Innstillinger" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Spill/_Nytt spill" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Farge" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animasjon" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Fortere" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Saktere" #: src/menus.c:454 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 "" "En prøve av fargen eller mønsteret. Du kan klikke og velge en ny farge eller " "et nytt mønsker, 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 "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:37 msgid "_Randomize" 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 "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/po/el.po0000644000175000017500000002277711550033130011143 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: 2011-04-09 12:35+0200\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 "Επιλογή Εικόνας" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Εικόνα" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Επιλογή χρώματος" #: src/colour-dialog.c:313 msgid "Image" msgstr "Εικόνα" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Επι_λογή" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Επιλέξτε μία εικόνα" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Επιστρωμένος" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Τοποθετήστε ένα αντίγραφο της εικόνας\n" "σε κάθε τμήμα" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Μοτίβο" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Τοποθετήστε ένα αντίγραφο της εικόνας κατά μήκος\n" "ολόκληρου του κύβου" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Βοήθεια" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Ρυθμίσεις/Εμφά_νιση\\/Απόκρυψη" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Παιχνίδι/_Νέο Παιχνίδι" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Χρώμα" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animation" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Γρηγορότερα" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Πιο αργά" #: src/menus.c:454 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 "" "Ένα δείγμα του χρώματος ή του μοτίβου. Μπορείτε να κάνετε κλικ και επιλογή " "ενός νέου χρώματος ή μοτίβου, ή να σύρετε ένα σε αυτό το κενό." #: 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:37 msgid "_Randomize" 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/po/eo.po0000644000175000017500000001677411550033130011146 00000000000000# Esperanto translation. # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the gnubik package. # Felipe Castro , 2011. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2011-03-13 12:26-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" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Bildo-Elektilo" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Ĉiuj Bildoj" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Ĉiuj Dosieroj" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Kolor-elektilo" #: src/colour-dialog.c:313 msgid "Image" msgstr "Bildo" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "E_lekti" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Elekti bildan dosieron" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Kahele" #: src/colour-dialog.c:326 msgid "Place a copy of the image on each block" msgstr "Meti kopion de la bildo en ĉiu bloko" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mozaike" #: src/colour-dialog.c:335 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:341 msgid "_Plain" msgstr "_Plate" #: src/colour-dialog.c:344 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" #: src/menus.c:230 msgid "Add _View" msgstr "Aldoni _Rigardon" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "Aldoni helpan rigardon al la kubo" #: src/menus.c:234 msgid "_Help" msgstr "_Helpo" #: src/menus.c:235 msgid "Sho_w/Hide" msgstr "Mon_tri/Kaŝi" #: src/menus.c:236 msgid "_Scripts" msgstr "_Skriptoj" #: src/menus.c:306 msgid "_Restart Game" msgstr "_Rekomencigi Maĉon" #: src/menus.c:310 msgid "_New Game" msgstr "_Nova Maĉo" #: src/menus.c:314 msgid "_Rear" msgstr "_Retroe" #: src/menus.c:316 msgid "_Left" msgstr "_Maldekstre" #: src/menus.c:318 msgid "Ri_ght" msgstr "_Dekstre" #: src/menus.c:320 msgid "_Top" msgstr "_Supre" #: src/menus.c:322 msgid "_Bottom" msgstr "Malsu_pre" #: src/menus.c:327 msgid "_Colours" msgstr "_Koloroj" #: src/menus.c:331 msgid "_Animation" msgstr "_Animacio" #: src/menus.c:335 msgid "_Faster" msgstr "Pli_rapide" #: src/menus.c:339 msgid "_Slower" msgstr "Malplirapi_de" #: src/menus.c:454 msgid "Rewind" msgstr "Retroigi" #: src/menus.c:456 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:37 msgid "_Randomize" msgstr "_Malordigi" #: 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 "_Animated" #~ msgstr "_Animacie" #~ msgid "_Fast" #~ msgstr "_Rapide" gnubik-2.4/po/de.po0000644000175000017500000002033211550033130011114 00000000000000# Message file for german version of GNUbik # Copyright (C) 2003 John Darrington # John Darrington , 2003. # msgid "" msgstr "" "Project-Id-Version: GNUbik 2.3\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2008-02-01 20:41+0800\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" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Bild" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Farbauswahl" #: src/colour-dialog.c:313 msgid "Image" msgstr "Bild" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "A_uswahl" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Auswahl einer Bilddatei" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "ge_kachelt" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Projiziere das Bild auf jeden Block\n" "des Würfels" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaik" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Projiziere das Bild über den\n" "gesamten Würfel" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, fuzzy msgid "Remove image from the cube face" msgstr "Benutze ein Bild für die 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 "" #: src/dialogs.c:117 msgid "Sets the number of blocks in each side" msgstr "Ändert die Anzahl der Blöcke je Seite" #: 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 "/_Spiel/_Neues Spiel" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Abmessungen" #: 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 "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 Züg 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] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Spiel" #: src/menus.c:229 msgid "_View" msgstr "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Hilfe" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/E_instellungen/Zeigen\\/Verstecken" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Spiel/_Neues Spiel" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Farben" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animation" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Schneller" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Langsamer" #: src/menus.c:454 msgid "Rewind" msgstr "Zurückspulen" #: src/menus.c:456 msgid "Go to the previous mark (or the beginning) of the sequence of moves" msgstr "Gehe zur vorherigen Markierung (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 "Laufe vorwärts durch die Zugabfolge" #: 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 "" "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 "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:37 msgid "_Randomize" 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 "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/po/da.po0000644000175000017500000001727111550033130011120 00000000000000# Danish translation GNUbik. # Copyright (C) 2011 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. # korrekturlæst Torben Grøn Helligsø. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2011-03-13 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" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Alle billeder" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Alle filer" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Farvevælger" #: src/colour-dialog.c:313 msgid "Image" msgstr "Billede" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "_Vælg" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Vælg en billedfil" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Fliselagt" #: src/colour-dialog.c:326 msgid "Place a copy of the image on each block" msgstr "Placer en kopi af billedet på hver blok" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaik" #: src/colour-dialog.c:335 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:341 msgid "_Plain" msgstr "_Almindelig" #: src/colour-dialog.c:344 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 "En 3-dimensionel magisk kube" #. 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.\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" #: src/menus.c:230 msgid "Add _View" msgstr "Tilføj _visning" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "Tilføj en hjælpevisning af kuben" #: src/menus.c:234 msgid "_Help" msgstr "_Hjælp" #: src/menus.c:235 msgid "Sho_w/Hide" msgstr "_Vis/skjul" #: src/menus.c:236 msgid "_Scripts" msgstr "_Skripter" #: src/menus.c:306 msgid "_Restart Game" msgstr "_Genstart spil" #: src/menus.c:310 msgid "_New Game" msgstr "_Nyt spil" #: src/menus.c:314 msgid "_Rear" msgstr "_Bagende" #: src/menus.c:316 msgid "_Left" msgstr "_Venstre" #: src/menus.c:318 msgid "Ri_ght" msgstr "_Højre" #: src/menus.c:320 msgid "_Top" msgstr "_Øverst" #: src/menus.c:322 msgid "_Bottom" msgstr "_Nederst" #: src/menus.c:327 msgid "_Colours" msgstr "_Farver" #: src/menus.c:331 msgid "_Animation" msgstr "_Animation" #: src/menus.c:335 msgid "_Faster" msgstr "_Hurtigere" #: src/menus.c:339 msgid "_Slower" msgstr "_Langsommere" #: src/menus.c:454 msgid "Rewind" msgstr "Spol tilbage" #: src/menus.c:456 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:37 msgid "_Randomize" msgstr "_Vælg tilfældig" #: 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 "_Animated" #~ msgstr "_Animeret" #~ msgid "_Fast" #~ msgstr "_Hurtig" gnubik-2.4/po/fi.po0000644000175000017500000002216711550033130011132 00000000000000# Message file for Finnish version of GNUbik # Copyright © 2004 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. # msgid "" msgstr "" "Project-Id-Version: gnubik 2.4-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2011-03-11 16:13+0200\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" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Kaikki kuvat" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Kaikki tiedostot" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Värivalitsija" #: src/colour-dialog.c:313 msgid "Image" msgstr "Kuva" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "_Valitse" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Valitse kuvatiedosto" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Laatoitettu" #: src/colour-dialog.c:326 msgid "Place a copy of the image on each block" msgstr "Aseta kuvan kopio jokaiselle sivulle" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaiikki" #: src/colour-dialog.c:335 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:341 msgid "_Plain" msgstr "_Pelkkä" #: src/colour-dialog.c:344 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ä" #: src/menus.c:230 msgid "Add _View" msgstr "Lisää _näkymä" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "Lisää kuution apunäkymä" #: src/menus.c:234 msgid "_Help" msgstr "_Opaste" #: src/menus.c:235 msgid "Sho_w/Hide" msgstr "Nä_ytä/Piilota" #: src/menus.c:236 msgid "_Scripts" msgstr "Skrip_tit" #: src/menus.c:306 msgid "_Restart Game" msgstr "Käynnistä peli uu_delleen" #: src/menus.c:310 msgid "_New Game" msgstr "_Uusi Peli" #: src/menus.c:314 msgid "_Rear" msgstr "Ta_usta" #: src/menus.c:316 msgid "_Left" msgstr "_Vasen" #: src/menus.c:318 msgid "Ri_ght" msgstr "O_ikea" #: src/menus.c:320 msgid "_Top" msgstr "Pääl_tä" #: src/menus.c:322 msgid "_Bottom" msgstr "Po_hjalta" #: src/menus.c:327 msgid "_Colours" msgstr "Vä_ri" #: src/menus.c:331 msgid "_Animation" msgstr "Ani_maatio" #: src/menus.c:335 msgid "_Faster" msgstr "N_opeampaa" #: src/menus.c:339 msgid "_Slower" msgstr "_Hitaampaa" #: src/menus.c:454 msgid "Rewind" msgstr "Palaa takaisin" #: src/menus.c:456 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:37 msgid "_Randomize" msgstr "Satunna_ista" #: 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 "_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/po/eu.po0000644000175000017500000002011711550033130011136 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: 2011-04-09 12:35+0200\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" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Irudia" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Kolore hautatzailea" #: src/colour-dialog.c:313 msgid "Image" msgstr "Irudia" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "_Hautatu" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Hautatu irudi fitxategi bat" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Errepikatuta" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Bloke bakoitzean irudiaren kopia\n" "bat jarri " #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaikoa" #: src/colour-dialog.c:335 #, 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:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Laguntza" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Ezarpenak/E_rakutsi\\/Ezkutatu" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Jokoa/_Joko berria" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Kolorea" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animazioa" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Bizkorrago" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Motelago" #: src/menus.c:454 msgid "Rewind" msgstr "Atzeratu" #: src/menus.c:456 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:37 msgid "_Randomize" 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/po/bg.po0000644000175000017500000002265511550033130011126 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: 2011-04-09 12:35+0200\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 "Избор на изображение" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Всички изображения" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Всички файлове" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Избор на цвят" #: src/colour-dialog.c:313 msgid "Image" msgstr "Изображение" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "_Избор" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Избор на файл с изображение" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "На _плочки" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Поставяне на копие от\n" "изображението върху всяко блокче" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Мозайка" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Поставяне на копие от\n" "изображението върху целия куб" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/Помо_щ" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Настройки/П_оказване\\/Скриване" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Игра/_Нова игра" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Цвят" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Анимация" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "По-бързо" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "По-бавно" #: src/menus.c:454 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 "" "Мостра на цвета или шарката. Натиснете за избор на цвят или шарка, или ги " "довлачете до тук." #: 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:37 msgid "_Randomize" 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/po/ms.po0000644000175000017500000001730511550033131011152 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: 2011-04-09 12:35+0200\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" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Imej" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Pemilih warna" #: src/colour-dialog.c:313 msgid "Image" msgstr "Imej" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Pi_lih" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Pilih fail imej" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Berulang" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Letak salinan bagi imej\n" " pada setiap blok" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mozek" #: src/colour-dialog.c:335 #, 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:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Bantuan" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Tetapan" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Permainan/Permainan Ba_ru" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Warna" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animasi" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Lebih pantas" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Lebih perlahan" #: src/menus.c:454 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:37 msgid "_Randomize" 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/po/gnubik.pot0000644000175000017500000001336411550033130012176 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR John Darrington # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy 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: 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 "" #: src/colour-dialog.c:209 msgid "All Images" msgstr "" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "" #: src/colour-dialog.c:313 msgid "Image" msgstr "" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "" #: src/colour-dialog.c:326 msgid "Place a copy of the image on each block" msgstr "" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "" #: src/colour-dialog.c:335 msgid "Place a copy of the image across the entire face of the cube" msgstr "" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 msgid "_Help" msgstr "" #: src/menus.c:235 msgid "Sho_w/Hide" msgstr "" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 msgid "_New Game" msgstr "" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 msgid "_Colours" msgstr "" #: src/menus.c:331 msgid "_Animation" msgstr "" #: src/menus.c:335 msgid "_Faster" msgstr "" #: src/menus.c:339 msgid "_Slower" msgstr "" #: src/menus.c:454 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:37 msgid "_Randomize" 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/po/pt.po0000644000175000017500000002050311550033131011150 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: 2011-04-09 12:35+0200\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" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Imagem" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Seleccionar Cor" #: src/colour-dialog.c:313 msgid "Image" msgstr "Imagem" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Se_leccionar" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Seleccione uma imagem" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "Mosaico" #: src/colour-dialog.c:326 #, 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:331 msgid "_Mosaic" msgstr "_Dividida" #: src/colour-dialog.c:335 #, 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:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Ajuda" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Definições/_Mostrar\\/Esconder" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Jogo/_Novo Jogo" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Cor" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animação" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Mais rápida" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Mais lenta" #: src/menus.c:454 msgid "Rewind" msgstr "Retroceder" #: src/menus.c:456 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:37 msgid "_Randomize" 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/po/Makefile.in0000644000175000017500000000063311545563565012263 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/po/sv.po0000644000175000017500000002012711550033131011157 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.3\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2010-12-15 15:28+0100\n" "Last-Translator: Daniel Nylander \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" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Bildväljare" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Alla bilder" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Alla filer" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Färgväljare" #: src/colour-dialog.c:313 msgid "Image" msgstr "Bild" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Vä_lj" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Välj en bildfil" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Rutad" #: src/colour-dialog.c:326 #, fuzzy msgid "Place a copy of the image on each block" msgstr "" "Placera en kopia av bilden\n" "på varje block" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mosaik" #: src/colour-dialog.c:335 #, fuzzy msgid "Place a copy of the image across the entire face of the cube" msgstr "" "Placera en kopia av bilden på\n" "hela kubens yta" #: src/colour-dialog.c:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, fuzzy msgid "Remove image from the cube face" msgstr "Använd en bildfil på kubens yta" #: src/dialogs.c:106 msgid "Size of cube:" msgstr "Kubens storlek:" #: src/dialogs.c:111 msgid "Re_gular cube" msgstr "" #: 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 "" #: 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 "/_Spel/_Nytt spel" #: src/dialogs.c:201 msgid "Dimensions" msgstr "Dimensioner" #: 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 "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] "" msgstr[1] "" #: src/menus.c:228 #, fuzzy msgid "_Game" msgstr "/_Spel" #: src/menus.c:229 msgid "_View" msgstr "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Hjälp" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Inställningar/Vi_sa\\/Göm" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Spel/_Nytt spel" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Färg" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animering" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Snabbare" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Långsammare" #: src/menus.c:454 msgid "Rewind" msgstr "Spola bakåt" #: src/menus.c:456 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 "Stopp 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 "" #: 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 "" "Ett test av färgen eller mönstret. Du kan klicka och välja en ny färg eller " "nytt mönster, 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 "" #: scripts/debug.scm:52 msgid "_Move" msgstr "" #: scripts/debug.scm:54 msgid "_Dump state" msgstr "" #: scripts/rand.scm:37 msgid "_Randomize" 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 "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/po/uk.po0000644000175000017500000002317311550033131011152 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. msgid "" msgstr "" "Project-Id-Version: gnubik 2.4-pre1\n" "Report-Msgid-Bugs-To: bug-gnubik@gnu.org\n" "POT-Creation-Date: 2011-04-09 12:35+0200\n" "PO-Revision-Date: 2011-03-11 20:00+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: \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.2\n" #: src/colour-dialog.c:184 msgid "Image Selector" msgstr "Вибір зображень" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Всі зображення" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Всі файли" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Вибір кольорів" #: src/colour-dialog.c:313 msgid "Image" msgstr "Зображення" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Ви_брати" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Виберіть файл з зображенням" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "П_литка" #: src/colour-dialog.c:326 msgid "Place a copy of the image on each block" msgstr "Розташувати копію зображення у кожному блоці" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Мозаїка" #: src/colour-dialog.c:335 msgid "Place a copy of the image across the entire face of the cube" msgstr "Розташувати копію зображення на всіх боковій поверхні кубика." #: src/colour-dialog.c:341 msgid "_Plain" msgstr "З_вичайний" #: src/colour-dialog.c:344 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 "П_ерегляд" #: src/menus.c:230 msgid "Add _View" msgstr "Додати п_ерегляд" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "Додати допоміжний перегляд кубика" #: src/menus.c:234 msgid "_Help" msgstr "_Довідка" #: src/menus.c:235 msgid "Sho_w/Hide" msgstr "По_казати/Сховати" #: src/menus.c:236 msgid "_Scripts" msgstr "С_крипти" #: src/menus.c:306 msgid "_Restart Game" msgstr "Пе_резапустити гру" #: src/menus.c:310 msgid "_New Game" msgstr "_Нова гра" #: src/menus.c:314 msgid "_Rear" msgstr "Зз_аду" #: src/menus.c:316 msgid "_Left" msgstr "_Ліворуч" #: src/menus.c:318 msgid "Ri_ght" msgstr "Пр_аворуч" #: src/menus.c:320 msgid "_Top" msgstr "З_гори" #: src/menus.c:322 msgid "_Bottom" msgstr "З_низу" #: src/menus.c:327 msgid "_Colours" msgstr "К_ольори" #: src/menus.c:331 msgid "_Animation" msgstr "_Анімація" #: src/menus.c:335 msgid "_Faster" msgstr "_Швидше" #: src/menus.c:339 msgid "_Slower" msgstr "П_овільніше" #: src/menus.c:454 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 "Помилка 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:37 msgid "_Randomize" msgstr "Зап_лутати" #: 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 "_Animated" #~ msgstr "_Анімація" #~ msgid "_Fast" #~ msgstr "_Швидко" gnubik-2.4/po/sl.po0000644000175000017500000002220211550033131011141 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-04-09 12:35+0200\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" #: src/colour-dialog.c:209 msgid "All Images" msgstr "Vse slike" #: src/colour-dialog.c:213 msgid "All Files" msgstr "Vse datoteke" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Izbirnik barv" #: src/colour-dialog.c:313 msgid "Image" msgstr "Slika" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Iz_beri" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Izberite slikovno datoteko" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "_Razpostavljeno" #: src/colour-dialog.c:326 msgid "Place a copy of the image on each block" msgstr "Postavi kopijo slike na vsako polje" #: src/colour-dialog.c:331 msgid "_Mosaic" msgstr "_Mozaik" #: src/colour-dialog.c:335 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:341 msgid "_Plain" msgstr "_Običajno" #: src/colour-dialog.c:344 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" #: src/menus.c:230 msgid "Add _View" msgstr "Dodaj _pogled" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "Dodaj pomožen pogled kocke" #: src/menus.c:234 msgid "_Help" msgstr "Pomo_č" #: src/menus.c:235 msgid "Sho_w/Hide" msgstr "_Pokaži/Skrij" #: src/menus.c:236 msgid "_Scripts" msgstr "_Skripti" #: src/menus.c:306 msgid "_Restart Game" msgstr "_Začni znova" #: src/menus.c:310 msgid "_New Game" msgstr "_Nova igra" #: src/menus.c:314 msgid "_Rear" msgstr "_Zadaj" #: src/menus.c:316 msgid "_Left" msgstr "_Levo" #: src/menus.c:318 msgid "Ri_ght" msgstr "_Desno" #: src/menus.c:320 msgid "_Top" msgstr "_Zgoraj" #: src/menus.c:322 msgid "_Bottom" msgstr "_Spodaj" #: src/menus.c:327 msgid "_Colours" msgstr "_Barve" #: src/menus.c:331 msgid "_Animation" msgstr "_Animacija" #: src/menus.c:335 msgid "_Faster" msgstr "_Hitreje" #: src/menus.c:339 msgid "_Slower" msgstr "_Počasneje" #: src/menus.c:454 msgid "Rewind" msgstr "Previj" #: src/menus.c:456 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:37 msgid "_Randomize" msgstr "_Naključno" #: 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/po/es.po0000644000175000017500000001762711550033130011150 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: 2011-04-09 12:35+0200\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" #: src/colour-dialog.c:209 #, fuzzy msgid "All Images" msgstr "Imagen" #: src/colour-dialog.c:213 msgid "All Files" msgstr "" #: src/colour-dialog.c:296 msgid "Colour selector" msgstr "Selector del color" #: src/colour-dialog.c:313 msgid "Image" msgstr "Imagen" #: src/colour-dialog.c:314 msgid "Se_lect" msgstr "Se_leccionar" #: src/colour-dialog.c:322 msgid "Select an image file" msgstr "Seleccionar un fichero imagen" #: src/colour-dialog.c:324 msgid "_Tiled" msgstr "En _mosaico" #: src/colour-dialog.c:326 #, 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:331 msgid "_Mosaic" msgstr "_Ajustado" #: src/colour-dialog.c:335 #, 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:341 msgid "_Plain" msgstr "" #: src/colour-dialog.c:344 #, 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 "" #: src/menus.c:230 msgid "Add _View" msgstr "" #: src/menus.c:231 msgid "Add an auxiliary view of the cube" msgstr "" #: src/menus.c:234 #, fuzzy msgid "_Help" msgstr "/_Ayuda" #: src/menus.c:235 #, fuzzy msgid "Sho_w/Hide" msgstr "/_Opciones" #: src/menus.c:236 msgid "_Scripts" msgstr "" #: src/menus.c:306 msgid "_Restart Game" msgstr "" #: src/menus.c:310 #, fuzzy msgid "_New Game" msgstr "/_Juego/_Nuevo juego" #: src/menus.c:314 msgid "_Rear" msgstr "" #: src/menus.c:316 msgid "_Left" msgstr "" #: src/menus.c:318 msgid "Ri_ght" msgstr "" #: src/menus.c:320 msgid "_Top" msgstr "" #: src/menus.c:322 msgid "_Bottom" msgstr "" #: src/menus.c:327 #, fuzzy msgid "_Colours" msgstr "Color" #: src/menus.c:331 #, fuzzy msgid "_Animation" msgstr "Animación" #: src/menus.c:335 #, fuzzy msgid "_Faster" msgstr "Más rápido" #: src/menus.c:339 #, fuzzy msgid "_Slower" msgstr "Más lento" #: src/menus.c:454 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:37 msgid "_Randomize" 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/configure0000755000175000017500000125651211550032737011505 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.67 for GNUbik 2.4. # # Report bugs to . # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and 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_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNUbik' PACKAGE_TARNAME='gnubik' PACKAGE_VERSION='2.4' PACKAGE_STRING='GNUbik 2.4' 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_LIBS GUILE_CFLAGS GLU_LIBS GLU_CFLAGS am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX GL_LIBS GL_CFLAGS PTHREAD_CFLAGS PTHREAD_LIBS PTHREAD_CC ax_pthread_config 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 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 AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC 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_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 CXX CXXFLAGS CCC 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' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures GNUbik 2.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/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:";; 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] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --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 CXX C++ compiler command CXXFLAGS C++ compiler flags 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 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 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## --------------------------------- ## ## Report this to 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 "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_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 "test \"\${$3+set}\"" = set; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile 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, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5 ; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi 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.11' # 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 test "${ac_cv_path_install+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; } # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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 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; } 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 --run true"; then am_missing_run="$MISSING --run " 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}" != 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 test "${ac_cv_prog_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_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 test "${ac_cv_path_mkdir+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac 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 test "${ac_cv_prog_AWK+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; 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 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' 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"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' 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='\' 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 test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5 ; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5 ; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5 ; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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'. 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 8's {/usr,}/bin/sh. touch 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 ;; 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 test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5 ; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done 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" = x""yes; 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 test "${ac_cv_safe_to_define___extensions__+set}" = set; 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 test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5 ; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu 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 test "${am_cv_CC_dependencies_compiler_type+set}" = set; 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'. 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 8's {/usr,}/bin/sh. touch 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 ;; 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 if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $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; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; 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. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { 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; } && test -f conftest2.$ac_objext && { { 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 eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&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_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { 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; } && test -f conftest2.$ac_objext && { { 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 # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; 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; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != 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 { $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 test "${ac_cv_c_const+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* 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. */ char *t; 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 saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; 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 test "${ac_cv_path_PKG_CONFIG+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_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 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.18 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh 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 test "${ac_cv_path_MSGFMT+set}" = set; 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 test "${ac_cv_path_GMSGFMT+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh 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 test "${ac_cv_path_XGETTEXT+set}" = set; 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 echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh 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 test "${ac_cv_path_MSGMERGE+set}" = set; 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 test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # 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 echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh 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 GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&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. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path 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 test "${acl_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do 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 GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -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 test "${acl_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's 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 test "${acl_cv_rpath+set}" = set; 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 test "${gl_cv_solaris_64bit+set}" = set; 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 test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; 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 test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; 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 "test \"\${$gt_func_gnugettext_libc+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; 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 test "${am_cv_func_iconv+set}" = set; 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 test "${am_cv_func_iconv_works+set}" = set; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi 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 int main () { /* 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 const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; 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, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* 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 const char input[] = "\263"; char buf[10]; 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, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #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 const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; 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, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #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)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi 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 "test \"\${$gt_func_gnugettext_libintl+set}\"" = set; 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 $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; 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 $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; 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 test "${ac_cv_have_x+set}" = set; 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 test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_nsl_gethostbyname+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_bsd_gethostbyname+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_socket_connect+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_posix_remove+set}" = set; 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" = x""yes; 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" = x""yes; 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 test "${ac_cv_lib_ipc_shmat+set}" = set; 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" = x""yes; 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 test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; 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" = x""yes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS 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 ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on True64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5 $as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; } 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 pthread_join (); int main () { return pthread_join (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test x"$ax_pthread_ok" = xno; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items starting with a "-" are # C compiler flags, and other items are library names, except for "none" # which indicates that we try without any flags at all, and "pthread-config" # which is a program returning the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) # -pthreads: Solaris/gcc # -mthreads: Mingw32/gcc, Lynx/gcc # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads too; # also defines -D_REENTRANT) # ... -mt is also the pthreads flag for HP/aCC # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case "${host_cpu}-${host_os}" in *solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (We need to link with -pthreads/-mt/ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather # a function called by this macro, so we could check for that, but # who knows whether they'll stub that too in a future libc.) So, # we'll just look for -pthreads and -lpthread first: ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags" ;; *-darwin*) ax_pthread_flags="-pthread $ax_pthread_flags" ;; esac if test x"$ax_pthread_ok" = xno; then for flag in $ax_pthread_flags; do case $flag in none) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5 $as_echo_n "checking whether pthreads work without any flags... " >&6; } ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5 $as_echo_n "checking whether pthreads work with $flag... " >&6; } PTHREAD_CFLAGS="$flag" ;; pthread-config) # Extract the first word of "pthread-config", so it can be a program name with args. set dummy pthread-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ax_pthread_config+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ax_pthread_config"; then ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ax_pthread_config="yes" $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_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no" fi fi ax_pthread_config=$ac_cv_prog_ax_pthread_config if test -n "$ax_pthread_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5 $as_echo "$ax_pthread_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$ax_pthread_config" = xno; then continue; fi PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5 $as_echo_n "checking for the pthreads library -l$flag... " >&6; } PTHREAD_LIBS="-l$flag" ;; esac save_LIBS="$LIBS" save_CFLAGS="$CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include static void routine(void* a) {a=0;} static void* start_routine(void* a) {return a;} int main () { pthread_t th; pthread_attr_t attr; pthread_create(&th,0,start_routine,0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_pthread_ok=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5 $as_echo "$ax_pthread_ok" >&6; } if test "x$ax_pthread_ok" = xyes; then break; fi PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Various other checks: if test "x$ax_pthread_ok" = xyes; then save_LIBS="$LIBS" LIBS="$PTHREAD_LIBS $LIBS" save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5 $as_echo_n "checking for joinable pthread attribute... " >&6; } attr_name=unknown for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int attr=$attr; return attr; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : attr_name=$attr; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5 $as_echo "$attr_name" >&6; } if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then cat >>confdefs.h <<_ACEOF #define PTHREAD_CREATE_JOINABLE $attr_name _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5 $as_echo_n "checking if more special flags are required for pthreads... " >&6; } flag=no case "${host_cpu}-${host_os}" in *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5 $as_echo "${flag}" >&6; } if test "x$flag" != xno; then PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" fi LIBS="$save_LIBS" CFLAGS="$save_CFLAGS" # More AIX lossage: must compile with xlc_r or cc_r if test x"$GCC" != xyes; then for ac_prog in xlc_r cc_r do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$PTHREAD_CC"; then ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_PTHREAD_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 PTHREAD_CC=$ac_cv_prog_PTHREAD_CC if test -n "$PTHREAD_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5 $as_echo "$PTHREAD_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$PTHREAD_CC" && break done test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}" else PTHREAD_CC=$CC fi else PTHREAD_CC="$CC" fi # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test x"$ax_pthread_ok" = xyes; then $as_echo "#define HAVE_PTHREAD 1" >>confdefs.h : else ax_pthread_ok=no 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 we are using the Microsoft C compiler" >&5 $as_echo_n "checking whether we are using the Microsoft C compiler... " >&6; } if test "${ax_cv_c_compiler_ms+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef _MSC_VER choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_compiler_ms=yes else ax_compiler_ms=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ax_cv_c_compiler_ms=$ax_compiler_ms fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_c_compiler_ms" >&5 $as_echo "$ax_cv_c_compiler_ms" >&6; } if test X$ax_compiler_ms = Xno; then : GL_CFLAGS="${PTHREAD_CFLAGS}"; GL_LIBS="${PTHREAD_LIBS} -lm" fi # # Use x_includes and x_libraries if they have been set (presumably by # AC_PATH_X). # if test "X$no_x" != "Xyes"; then : if test -n "$x_includes"; then : GL_CFLAGS="-I${x_includes} ${GL_CFLAGS}" fi if test -n "$x_libraries"; then : GL_LIBS="-L${x_libraries} -lX11 ${GL_LIBS}" fi fi ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}" for ac_header in GL/gl.h OpenGL/gl.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$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 CPPFLAGS="${ax_save_CPPFLAGS}" for ac_header in windows.h do : ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default" if test "x$ac_cv_header_windows_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINDOWS_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL library" >&5 $as_echo_n "checking for OpenGL library... " >&6; } if test "${ax_cv_check_gl_libgl+set}" = set; then : $as_echo_n "(cached) " >&6 else ax_cv_check_gl_libgl="no" case $host_cpu in x86_64) ax_check_gl_libdir=lib64 ;; *) ax_check_gl_libdir=lib ;; esac ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}" ax_save_LIBS="${LIBS}" LIBS="" ax_check_libs="-lopengl32 -lGL" for ax_lib in ${ax_check_libs}; do if test X$ax_compiler_ms = Xyes; then : ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'` else ax_try_lib="${ax_lib}" fi LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GL_H # include # elif defined(HAVE_OPENGL_GL_H) # include # else # error no gl.h # endif int main () { glBegin(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_check_gl_libgl="${ax_try_lib}"; break else ax_check_gl_nvidia_flags="-L/usr/${ax_check_gl_libdir}/nvidia" LIBS="${ax_try_lib} ${ax_check_gl_nvidia_flags} ${GL_LIBS} ${ax_save_LIBS}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GL_H # include # elif defined(HAVE_OPENGL_GL_H) # include # else # error no gl.h # endif int main () { glBegin(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_check_gl_libgl="${ax_try_lib} ${ax_check_gl_nvidia_flags}"; break else ax_check_gl_dylib_flag='-dylib_file /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib' LIBS="${ax_try_lib} ${ax_check_gl_dylib_flag} ${GL_LIBS} ${ax_save_LIBS}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GL_H # include # elif defined(HAVE_OPENGL_GL_H) # include # else # error no gl.h # endif int main () { glBegin(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_check_gl_libgl="${ax_try_lib} ${ax_check_gl_dylib_flag}"; break 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 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "X$ax_cv_check_gl_libgl" = Xno -a "X$no_x" = Xyes; then : LIBS='-framework OpenGL' cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GL_H # include # elif defined(HAVE_OPENGL_GL_H) # include # else # error no gl.h # endif int main () { glBegin(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_check_gl_libgl="$LIBS" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi LIBS=${ax_save_LIBS} CPPFLAGS=${ax_save_CPPFLAGS} fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_gl_libgl" >&5 $as_echo "$ax_cv_check_gl_libgl" >&6; } if test "X$ax_cv_check_gl_libgl" = Xno; then : no_gl=yes; GL_CFLAGS=""; GL_LIBS="" else GL_LIBS="${ax_cv_check_gl_libgl} ${GL_LIBS}" 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=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" 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 test "${am_cv_CXX_dependencies_compiler_type+set}" = set; 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'. 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_CXX_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 8's {/usr,}/bin/sh. touch 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 ;; 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_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi GLU_CFLAGS="${GL_CFLAGS}" ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}" for ac_header in GL/glu.h OpenGL/glu.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$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 CPPFLAGS="${ax_save_CPPFLAGS}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenGL Utility library" >&5 $as_echo_n "checking for OpenGL Utility library... " >&6; } if test "${ax_cv_check_glu_libglu+set}" = set; then : $as_echo_n "(cached) " >&6 else ax_cv_check_glu_libglu="no" ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GL_CFLAGS} ${CPPFLAGS}" ax_save_LIBS="${LIBS}" # # First, check for the possibility that everything we need is already in # GL_LIBS. # LIBS="${GL_LIBS} ${ax_save_LIBS}" # # libGLU typically links with libstdc++ on POSIX platforms. # However, setting the language to C++ means that test program # source is named "conftest.cc"; and Microsoft cl doesn't know what # to do with such a file. # ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test X$ax_compiler_ms = Xyes; then : ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif int main () { gluBeginCurve(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_check_glu_libglu=yes else LIBS="" ax_check_libs="-lglu32 -lGLU" for ax_lib in ${ax_check_libs}; do if test X$ax_compiler_ms = Xyes; then : ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'` else ax_try_lib="${ax_lib}" fi LIBS="${ax_try_lib} ${GL_LIBS} ${ax_save_LIBS}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if defined(HAVE_WINDOWS_H) && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLU_H # include # elif defined(HAVE_OPENGL_GLU_H) # include # else # error no glu.h # endif int main () { gluBeginCurve(0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_check_glu_libglu="${ax_try_lib}"; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test X$ax_compiler_ms = Xyes; then : ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu 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 LIBS=${ax_save_LIBS} CPPFLAGS=${ax_save_CPPFLAGS} fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_glu_libglu" >&5 $as_echo "$ax_cv_check_glu_libglu" >&6; } if test "X$ax_cv_check_glu_libglu" = Xno; then : no_glu=yes; GLU_CFLAGS=""; GLU_LIBS="" else if test "X$ax_cv_check_glu_libglu" = Xyes; then : GLU_LIBS="$GL_LIBS" else GLU_LIBS="${ax_cv_check_glu_libglu} ${GL_LIBS}" fi fi # # Some versions of Mac OS X include a broken interpretation of the GLU # tesselation callback function signature. # if test "X$ax_cv_check_glu_libglu" != Xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for varargs GLU tesselator callback function type" >&5 $as_echo_n "checking for varargs GLU tesselator callback function type... " >&6; } if test "${ax_cv_varargs_glu_tesscb+set}" = set; then : $as_echo_n "(cached) " >&6 else ax_cv_varargs_glu_tesscb=no ax_save_CFLAGS="$CFLAGS" CFLAGS="$GL_CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # ifdef HAVE_GL_GLU_H # include # else # include # endif int main () { GLvoid (*func)(...); gluTessCallback(0, 0, func) ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ax_cv_varargs_glu_tesscb=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$ax_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_varargs_glu_tesscb" >&5 $as_echo "$ax_cv_varargs_glu_tesscb" >&6; } if test X$ax_cv_varargs_glu_tesscb = Xyes; then : $as_echo "#define HAVE_VARARGS_GLU_TESSCB 1" >>confdefs.h fi fi if test "x$no_gl" = x"yes"; then as_fn_error $? "\"No GL library seems to be installed\"" "$LINENO" 5 fi if test "x$no_glu" = x"yes"; then as_fn_error $? "\"No GLU library seems to be installed\"" "$LINENO" 5 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` 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` 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 "guile-2.0" 2>&1` else GUILE_PKG_ERRORS=`$PKG_CONFIG --print-errors "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 test "${ac_cv_search_scm_c_string_length+set}" = set; 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 test "${ac_cv_search_scm_c_string_length+set}" = set; then : break fi done if test "${ac_cv_search_scm_c_string_length+set}" = set; 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 1.8.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 test "${ac_cv_search_scm_c_string_length+set}" = set; 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 test "${ac_cv_search_scm_c_string_length+set}" = set; then : break fi done if test "${ac_cv_search_scm_c_string_length+set}" = set; 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 1.8.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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cos" >&5 $as_echo_n "checking for library containing cos... " >&6; } if test "${ac_cv_search_cos+set}" = set; 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 test "${ac_cv_search_cos+set}" = set; then : break fi done if test "${ac_cv_search_cos+set}" = set; 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.20.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.20.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.20.0" 2>/dev/null` 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.20.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.20.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.20.0" 2>/dev/null` 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 "gtk+-2.0 >= 2.20.0" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk+-2.0 >= 2.20.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.20.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` 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` 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 "gdk-pixbuf-2.0" 2>&1` else GDK_PIXBUF_PKG_ERRORS=`$PKG_CONFIG --print-errors "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` 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` 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 "gdkglext-1.0" 2>&1` else GDK_GL_EXT_PKG_ERRORS=`$PKG_CONFIG --print-errors "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` 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` 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 "gtkglext-1.0" 2>&1` else GTK_GL_EXT_PKG_ERRORS=`$PKG_CONFIG --print-errors "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 ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GLU_CFLAGS} ${CPPFLAGS}" for ac_header in GL/glut.h GLUT/glut.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$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 CPPFLAGS="${ax_save_CPPFLAGS}" GLUT_CFLAGS=${GLU_CFLAGS} GLUT_LIBS=${GLU_LIBS} # # If X is present, assume GLUT depends on it. # if test X$no_x != Xyes; then : GLUT_LIBS="${X_PRE_LIBS} -lXmu -lXi ${X_EXTRA_LIBS} ${GLUT_LIBS}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLUT library" >&5 $as_echo_n "checking for GLUT library... " >&6; } if test "${ax_cv_check_glut_libglut+set}" = set; then : $as_echo_n "(cached) " >&6 else ax_cv_check_glut_libglut="no" 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 ax_save_CPPFLAGS="${CPPFLAGS}" CPPFLAGS="${GLUT_CFLAGS} ${CPPFLAGS}" ax_save_LIBS="${LIBS}" LIBS="" ax_check_libs="-lglut32 -lglut" for ax_lib in ${ax_check_libs}; do if test X$ax_compiler_ms = Xyes; then : ax_try_lib=`echo $ax_lib | sed -e 's/^-l//' -e 's/$/.lib/'` else ax_try_lib="${ax_lib}" fi LIBS="${ax_try_lib} ${GLUT_LIBS} ${ax_save_LIBS}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if HAVE_WINDOWS_H && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLUT_H # include # elif defined(HAVE_GLUT_GLUT_H) # include # else # error no glut.h # endif int main () { glutMainLoop() ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_check_glut_libglut="${ax_try_lib}"; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done if test "X$ax_cv_check_glut_libglut" = Xno -a "X$no_x" = Xyes; then : LIBS='-framework GLUT' cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # if HAVE_WINDOWS_H && defined(_WIN32) # include # endif # ifdef HAVE_GL_GLUT_H # include # elif defined(HAVE_GLUT_GLUT_H) # include # else # error no glut.h # endif int main () { glutMainLoop() ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ax_cv_check_glut_libglut="$LIBS" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="${ax_save_CPPFLAGS}" LIBS="${ax_save_LIBS}" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_glut_libglut" >&5 $as_echo "$ax_cv_check_glut_libglut" >&6; } if test "X$ax_cv_check_glut_libglut" = Xno; then : no_glut="yes"; GLUT_CFLAGS=""; GLUT_LIBS="" else GLUT_LIBS="${ax_cv_check_glut_libglut} ${GLUT_LIBS}" fi if test "x$no_glut" = x"yes"; then as_fn_error $? "\"Debug features requested but no GLUT library seems to be installed\"" "$LINENO" 5 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 test "${ac_cv_c_const+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* 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. */ char *t; 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 saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; 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 test "${ac_cv_c_inline+set}" = set; 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" = x""yes; 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 test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs 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 if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" 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. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # 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 if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by GNUbik $as_me 2.4, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . 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 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' 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= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` 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 "$tmp/subs.awk" >$tmp/out \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # 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"" || { # Autoconf 2.62 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/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 assigment 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 assigment 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/COPYING0000644000175000017500000010451311545563565010635 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/doc/0000755000175000017500000000000011550033310010373 500000000000000gnubik-2.4/doc/gnubik.texinfo0000644000175000017500000005126711545563565013233 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/doc/automake.mk0000644000175000017500000000015711545563565012505 00000000000000info_TEXINFOS = doc/gnubik.texinfo EXTRA_DIST = \ doc/gnubik.6 \ doc/gnubik-rubric CLEANFILES = gnubik.dvi gnubik-2.4/doc/gnubik-rubric0000644000175000017500000002372511545563565013042 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/doc/gnubik.info0000644000175000017500000005307011545564003012470 00000000000000This is ../doc/gnubik.info, produced by makeinfo version 4.11 from ../doc/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, Next: Using, Prev: Top, Up: Top 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: Top589 Node: Invoking1230 Node: Using1842 Node: Configuration2306 Node: Options2511 Node: Resources3367 Node: Viewing3835 Node: Manipulating4791 Node: Running scripts5410 Node: Replaying moves6253 Node: Writing scripts8271 Node: Scripting Introduction8804 Node: Script initialization10133 Node: Raw interface12132 Node: Symbolic interface16876 Node: Developer tips20430  End Tag Table gnubik-2.4/doc/gnubik.60000644000175000017500000000777011545563565011724 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/icons/0000755000175000017500000000000011550033307010747 500000000000000gnubik-2.4/icons/automake.mk0000644000175000017500000000170211545563565013050 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) $(top_srcdir)/icons/logo$$size.png $(themedir)/$${size}x$${size}/$(context)/gnubik.png ; \ done gtk-update-icon-cache --ignore-theme-index $(themedir) INSTALL_DATA_HOOKS = install-icons uninstall-icons: for size in $(sizes); do \ $(RM) $(themedir)/$${size}x$${size}/$(context)/gnubik.png ; \ done gtk-update-icon-cache --ignore-theme-index $(themedir) UNINSTALL_DATA_HOOKS = uninstall-icons 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 desktopdir = $(datadir)/applications desktop_DATA = icons/gnubik.desktop EXTRA_DIST += icons/gnubik.desktop gnubik-2.4/icons/logo32.xcf0000644000175000017500000001262111545563565012522 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/icons/logo48.png0000644000175000017500000000427311545563565012541 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-= :ެ 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/icons/logo22.png0000644000175000017500000000223411545563565012524 00000000000000PNG  IHDRĴl;sRGB pHYs B(xAIDAT8˥ilTewfҲ, TlVjkVHYb0%YT 5! ".%AL hBK[L̽3Hs$: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/O5Xuppu|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/ABOUT-NLS0000644000175000017500000027215511545563565011041 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/INSTALL0000644000175000017500000000144711545563565010635 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.12 or later. * 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/README0000644000175000017500000000036611545563565010463 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/Makefile.in0000644000175000017500000025410411550032735011633 00000000000000# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 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@ 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 DIST_COMMON = README $(am__configure_deps) $(dist_script_DATA) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(top_srcdir)/configure \ $(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 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 bin_PROGRAMS = src/gnubik$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_check_gl.m4 \ $(top_srcdir)/m4/ax_check_glu.m4 \ $(top_srcdir)/m4/ax_check_glut.m4 \ $(top_srcdir)/m4/ax_lang_compiler_ms.m4 \ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) 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)$(desktopdir)" "$(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 $@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(src_gnubik_SOURCES) DIST_SOURCES = $(src_gnubik_SOURCES) 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 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 uninstall-recursive 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' DATA = $(desktop_DATA) $(dist_script_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(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 distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ 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@ GUILE_CFLAGS = @GUILE_CFLAGS@ GUILE_LIBS = @GUILE_LIBS@ 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@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ 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@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ ax_pthread_config = @ax_pthread_config@ 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.10 subdir-objects SUFFIXES = .po .gmo ALL_LOCAL = $(GMOFILES) 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 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/gnubik.desktop CLEANFILES = gnubik.dvi $(GMOFILES) $(POTFILE) DOMAIN = $(PACKAGE) MSGID_BUGS_ADDRESS = $(PACKAGE_BUGREPORT) POFILES = 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/he.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/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 INSTALL_DATA_HOOKS = install-icons UNINSTALL_DATA_HOOKS = uninstall-icons desktopdir = $(datadir)/applications desktop_DATA = icons/gnubik.desktop ACLOCAL_AMFLAGS = -I m4 all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .po .gmo .c .dvi .o .obj .ps am--refresh: @: $(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 .PRECIOUS: 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_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 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi 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) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ 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) src/$(am__dirstamp) @rm -f src/gnubik$(EXEEXT) $(src_gnubik_LINK) $(src_gnubik_OBJECTS) $(src_gnubik_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f src/src_gnubik-colour-dialog.$(OBJEXT) -rm -f src/src_gnubik-control.$(OBJEXT) -rm -f src/src_gnubik-cube.$(OBJEXT) -rm -f src/src_gnubik-cubeview.$(OBJEXT) -rm -f src/src_gnubik-cursors.$(OBJEXT) -rm -f src/src_gnubik-dialogs.$(OBJEXT) -rm -f src/src_gnubik-drwBlock.$(OBJEXT) -rm -f src/src_gnubik-game.$(OBJEXT) -rm -f src/src_gnubik-glarea-common.$(OBJEXT) -rm -f src/src_gnubik-guile-hooks.$(OBJEXT) -rm -f src/src_gnubik-main.$(OBJEXT) -rm -f src/src_gnubik-menus.$(OBJEXT) -rm -f src/src_gnubik-move.$(OBJEXT) -rm -f src/src_gnubik-quarternion.$(OBJEXT) -rm -f src/src_gnubik-select.$(OBJEXT) -rm -f src/src_gnubik-swatch.$(OBJEXT) -rm -f src/src_gnubik-textures.$(OBJEXT) -rm -f src/src_gnubik-txfm.$(OBJEXT) -rm -f src/src_gnubik-version.$(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@ 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@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ 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@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` src/src_gnubik-cube.o: src/cube.c @am__fastdepCC_TRUE@ $(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__mv) src/$(DEPDIR)/src_gnubik-cube.Tpo src/$(DEPDIR)/src_gnubik-cube.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-cube.Tpo src/$(DEPDIR)/src_gnubik-cube.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-cubeview.Tpo src/$(DEPDIR)/src_gnubik-cubeview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-cubeview.Tpo src/$(DEPDIR)/src_gnubik-cubeview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-colour-dialog.Tpo src/$(DEPDIR)/src_gnubik-colour-dialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-colour-dialog.Tpo src/$(DEPDIR)/src_gnubik-colour-dialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-control.Tpo src/$(DEPDIR)/src_gnubik-control.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-control.Tpo src/$(DEPDIR)/src_gnubik-control.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-cursors.Tpo src/$(DEPDIR)/src_gnubik-cursors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-cursors.Tpo src/$(DEPDIR)/src_gnubik-cursors.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-dialogs.Tpo src/$(DEPDIR)/src_gnubik-dialogs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-dialogs.Tpo src/$(DEPDIR)/src_gnubik-dialogs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-drwBlock.Tpo src/$(DEPDIR)/src_gnubik-drwBlock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-drwBlock.Tpo src/$(DEPDIR)/src_gnubik-drwBlock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-game.Tpo src/$(DEPDIR)/src_gnubik-game.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-game.Tpo src/$(DEPDIR)/src_gnubik-game.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-glarea-common.Tpo src/$(DEPDIR)/src_gnubik-glarea-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-glarea-common.Tpo src/$(DEPDIR)/src_gnubik-glarea-common.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-guile-hooks.Tpo src/$(DEPDIR)/src_gnubik-guile-hooks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-guile-hooks.Tpo src/$(DEPDIR)/src_gnubik-guile-hooks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-main.Tpo src/$(DEPDIR)/src_gnubik-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-main.Tpo src/$(DEPDIR)/src_gnubik-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-menus.Tpo src/$(DEPDIR)/src_gnubik-menus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-menus.Tpo src/$(DEPDIR)/src_gnubik-menus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-move.Tpo src/$(DEPDIR)/src_gnubik-move.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-move.Tpo src/$(DEPDIR)/src_gnubik-move.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-quarternion.Tpo src/$(DEPDIR)/src_gnubik-quarternion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-quarternion.Tpo src/$(DEPDIR)/src_gnubik-quarternion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-select.Tpo src/$(DEPDIR)/src_gnubik-select.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-select.Tpo src/$(DEPDIR)/src_gnubik-select.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-swatch.Tpo src/$(DEPDIR)/src_gnubik-swatch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-swatch.Tpo src/$(DEPDIR)/src_gnubik-swatch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-txfm.Tpo src/$(DEPDIR)/src_gnubik-txfm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-txfm.Tpo src/$(DEPDIR)/src_gnubik-txfm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-textures.Tpo src/$(DEPDIR)/src_gnubik-textures.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-textures.Tpo src/$(DEPDIR)/src_gnubik-textures.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-version.Tpo src/$(DEPDIR)/src_gnubik-version.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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@ $(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__mv) src/$(DEPDIR)/src_gnubik-version.Tpo src/$(DEPDIR)/src_gnubik-version.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ 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@ $(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 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) TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ $(TEXI2DVI) -o $@ `test -f 'doc/gnubik.texinfo' || echo '$(srcdir)/'`doc/gnubik.texinfo doc/gnubik.pdf: doc/gnubik.texinfo doc/$(am__dirstamp) TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ $(TEXI2PDF) -o $@ `test -f 'doc/gnubik.texinfo' || echo '$(srcdir)/'`doc/gnubik.texinfo doc/gnubik.html: doc/gnubik.texinfo doc/$(am__dirstamp) rm -rf $(@:.html=.htp) 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 $@; \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ else \ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ exit 1; \ fi .dvi.ps: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -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)' && \ (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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 gnubik.aux gnubik.cp gnubik.cps gnubik.fn gnubik.fns gnubik.ky \ gnubik.kys gnubik.log gnubik.pg gnubik.pgs gnubik.tmp \ gnubik.toc gnubik.tp gnubik.tps gnubik.vr gnubik.vrs 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-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) test -z "$(desktopdir)" || $(MKDIR_P) "$(DESTDIR)$(desktopdir)" @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ 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)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(desktopdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(desktopdir)" && rm -f $$files install-dist_scriptDATA: $(dist_script_DATA) @$(NORMAL_INSTALL) test -z "$(scriptdir)" || $(MKDIR_P) "$(DESTDIR)$(scriptdir)" @list='$(dist_script_DATA)'; test -n "$(scriptdir)" || list=; \ 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|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(scriptdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(scriptdir)" && rm -f $$files # 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. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags 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 \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ 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__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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.lzma*) \ lzma -dc $(distdir).tar.lzma | $(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 a+w $(distdir) mkdir $(distdir)/_build mkdir $(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 \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(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__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: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { 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)$(desktopdir)" "$(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: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install 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-desktopDATA 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) test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ 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) test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ if test -d "$$d$$p"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d$$p"; \ 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) test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ 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 (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; 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) test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ 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) test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" @list='$(PSS)'; test -n "$(psdir)" || list=; \ 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-desktopDATA \ 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: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-data-am install-strip \ tags-recursive uninstall-am .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am all-local am--refresh check check-am clean \ clean-aminfo clean-binPROGRAMS clean-generic ctags \ ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-info \ dist-lzma 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-desktopDATA 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-recursive uninstall uninstall-am \ uninstall-binPROGRAMS uninstall-desktopDATA \ uninstall-dist_scriptDATA uninstall-dvi-am uninstall-hook \ uninstall-html-am uninstall-info-am uninstall-pdf-am \ uninstall-ps-am $(POTFILE): $(DIST_SOURCES) $(dist_script_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) --language=scheme --keyword=_ --keyword=N_ -j -o $@ $(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) $(top_srcdir)/icons/logo$$size.png $(themedir)/$${size}x$${size}/$(context)/gnubik.png ; \ done gtk-update-icon-cache --ignore-theme-index $(themedir) 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-data-hook: $(INSTALL_DATA_HOOKS) uninstall-hook: $(UNINSTALL_DATA_HOOKS) 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/config.h.in0000644000175000017500000001050111550032733011576 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 MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the MacOS 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 to 1 if you have the header file. */ #undef HAVE_GLUT_GLUT_H /* Define to 1 if you have the header file. */ #undef HAVE_GL_GLUT_H /* Define to 1 if you have the header file. */ #undef HAVE_GL_GLU_H /* Define to 1 if you have the header file. */ #undef HAVE_GL_GL_H /* 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_OPENGL_GLU_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENGL_GL_H /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD /* 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 /* Use nonstandard varargs form for the GLU tesselator callback */ #undef HAVE_VARARGS_GLU_TESSCB /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* 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 necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* 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/NEWS0000644000175000017500000000377011550032534010263 00000000000000GNUbik 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/aclocal.m40000644000175000017500000040606311550032730011424 00000000000000# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 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_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, [m4_warning([this file was generated for autoconf 2.67. 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 63 (gettext-0.18) dnl Copyright (C) 1995-2010 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 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 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 MacOS 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_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], [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_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [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_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [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], []) # iconv.m4 serial 11 (gettext-0.18.1) dnl Copyright (C) 2000-2002, 2007-2010 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_TRY_LINK will then fail, the second AC_TRY_LINK 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_TRY_LINK([#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_TRY_LINK([#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, HP-UX 11.11, Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include #include int main () { /* 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 const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; 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, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } /* 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 const char input[] = "\263"; char buf[10]; 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, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #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 const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; 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, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #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)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) 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])]], [[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_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || 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.]) fi ]) # intlmacosx.m4 serial 3 (gettext-0.18) dnl Copyright (C) 2004-2010 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 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 package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on MacOS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in MacOS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#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 MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in MacOS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#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 MacOS 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 4 (gettext-0.18) dnl Copyright (C) 1996-2003, 2009-2010 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/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.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 ld's only accept -v. case `$LD -v 2>&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh 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 GCC]) 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. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path 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 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do 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 GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) # lib-link.m4 serial 21 (gettext-0.18) dnl Copyright (C) 2001-2010 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_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[translit([$1],[./-], [___])]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[translit([$1],[./-], [___])]) pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 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],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [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],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[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],[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-2010 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-2010 Free Software Foundation, dnl 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 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 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]) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # 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 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) 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 ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # 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]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- 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`], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- 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 ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # 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 "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$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 ])# PKG_CHECK_MODULES # po.m4 serial 17 (gettext-0.18) dnl Copyright (C) 1995-2010 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 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 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]) 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([AM_PROG_MKDIR_P])dnl defined by automake 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.18]) 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" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/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 assigment 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 assigment 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" 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 echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh 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, 2003, 2005, 2006, 2007, 2008 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.11' 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.11.1], [], [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.11.1])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, 2003, 2005 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], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # 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. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$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, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # 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. # serial 10 # 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", "GCJ", or "OBJC". # 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 ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" 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'. 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 8's {/usr,}/bin/sh. touch 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 ;; 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, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # 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. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 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"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //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' -e 's/\$U/'"$U"'/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, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 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. # serial 16 # 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. # 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.62])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], [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], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [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([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. 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)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl 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 ]) 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, 2003, 2005, 2008 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}" != 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, 2005 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. # serial 2 # 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, 2002, 2003, 2005, 2009 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. # serial 4 # 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 ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # 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. # serial 6 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != 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 dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # 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. # serial 6 # 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 supports --run. # If it does, 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 --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 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_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 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. # serial 4 # _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])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # 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. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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 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)]) # Copyright (C) 2001, 2003, 2005 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, 2008 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. # serial 2 # _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, 2005 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. # serial 2 # _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. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. 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 m4_include([m4/ax_check_gl.m4]) m4_include([m4/ax_check_glu.m4]) m4_include([m4/ax_check_glut.m4]) m4_include([m4/ax_lang_compiler_ms.m4]) m4_include([m4/ax_pthread.m4]) gnubik-2.4/Makefile.am0000644000175000017500000000207111547144747011631 00000000000000## Process this file with automake to produce Makefile.in -*- makefile -*- SUBDIRS= po AUTOMAKE_OPTIONS = gnits 1.10 subdir-objects SUFFIXES= ALL_LOCAL= CLEAN_LOCAL= icondir=$(pkgdatadir)/icons AM_CPPFLAGS=-DLOCALEDIR=\"$(localedir)\" -DPKGICONDIR=\"$(icondir)\" AM_CFLAGS= if cc_is_gcc AM_CFLAGS+=-Wall -Wwrite-strings \ -Wpointer-arith -Wno-sign-compare -Wmissing-prototypes endif include $(top_srcdir)/src/automake.mk include $(top_srcdir)/scripts/automake.mk include $(top_srcdir)/doc/automake.mk include $(top_srcdir)/po/automake.mk include $(top_srcdir)/icons/automake.mk ACLOCAL_AMFLAGS = -I m4 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